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)
