Index: /issm/trunk/externalpackages/dakota/install.sh
===================================================================
--- /issm/trunk/externalpackages/dakota/install.sh	(revision 9570)
+++ /issm/trunk/externalpackages/dakota/install.sh	(revision 9571)
@@ -29,5 +29,5 @@
 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
+#patch -R src/packages/Pecos/src/LHSDriver.cpp ./LHSDriver.cpp.patch
 
 #Configure dakota
Index: /issm/trunk/externalpackages/dyson/ldap.pl
===================================================================
--- /issm/trunk/externalpackages/dyson/ldap.pl	(revision 9571)
+++ /issm/trunk/externalpackages/dyson/ldap.pl	(revision 9571)
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+#
+# LDAP.PL - Acquire JPL LDAP data and pare down to user IDs - 2011-08-01
+#
+$cat="/bin/cat"; $srt="/bin/sort"; $ldb="/usr/bin/ldapsearch";                 # Binary locations (change as needed)
+$lds="ldap.jpl.nasa.gov"; $ou="ou=personnel,dc=dir,dc=jpl,dc=nasa,dc=gov"; # Define LDAP server & organization
+$bn="jplbadgenumber"; $txt="$bn".".txt"; $db="jplusers.db";                # Initialize values
+#
+system(`$ldb -h $lds -b $ou uid=* filter $bn > $txt`);                     # Execute LDAPsearch, write to file
+#
+open(I,"<$txt");                                                           # Open input file handle
+  open(O,">badges.tmp");                                                   # Open output file handle
+    while (<I>) { chomp($_);                                               # Spool through input file
+      if ($_=~"^uid=") {                                                   # If line begins with UID value,
+        $_=~s/uid=//; $_=~s/,(.*)$//; $_=~s/\n//;                          #   strip line of extraneous data
+        if (!($_=~/^\d\d\d\d\d\d/)) { print O "$_\n"; }                    # If UID is non-numeric, print output
+      }                                                                    # Close condition
+    }                                                                      # Close spool
+  close(O);                                                                # Close output file handle
+close(I);                                                                  # Close input file handle
+#
+system(`$cat badges.tmp |$srt -u > $db 2>/dev/null`);                      # Sort output
+unlink("badges.tmp"); unlink("$txt");                                      # Unlink temp files
+#
+# EOF - 2011-08-01 - Jay Dyson <jdyson@jpl.nasa.gov>
Index: /issm/trunk/externalpackages/dyson/readme.txt
===================================================================
--- /issm/trunk/externalpackages/dyson/readme.txt	(revision 9571)
+++ /issm/trunk/externalpackages/dyson/readme.txt	(revision 9571)
@@ -0,0 +1,38 @@
+-- ARCHIVE MANIFEST ------------------------------------------ 2011-08-19 --
+
+  Filename        Description
+  --------------  ----------------------------------------------------------
+  readme.txt      This file: describes script functions.
+  ldap.pl         PERL script for acquiring JPL user IDs via cron job.
+  source_seek.sh  Code-scanning script.  Surveys scripts for hard-coded IP
+                  addresses, password callouts, and user IDs.
+
+-- SCRIPT INFORMATION ------------------------------------------------------
+
+  LDAP.PL (requires PERL, UNIX ldapsearch, and related utilities)
+  --------------------------------------------------------------------------
+  The LDAP.PL script is intended solely for twice-daily invocation via cron.
+  This script should be run once at noon, once at midnight.  This script 
+  generates the jplusers.db file on which the SOURCE_SEEK.SH shell script 
+  relies for its scanning of source files.
+
+  SOURCE_SEEK.SH (requires UNIX shell and related utilities)
+  --------------------------------------------------------------------------
+  The SOURCE_SEEK.SH shell script is intended for regular cron invocation,
+  but may be run at system administrator discretion.  This script uses UNIX
+  'find' and 'grep' utilities to scan code files for hard-coded JPL Internet
+  Protocol (IP) addresses, password callouts, and JPL user IDs.  This script
+  accepts the path where source code files reside as a command line
+  argument (e.g., ./source_seek.sh /path/to/sourcecode/files).
+
+-- AUTHOR CONTACT INFO -----------------------------------------------------
+
+  Please direct questions regarding these files to the developer.
+ 
+  Name   : Jay Dyson, CISSP
+  Role   : IT Security Engineer
+  Group  : JPL IT Security
+  E-mail : jdyson@jpl.nasa.gov
+  Phone  : 818-397-4960
+
+------------------------------------------------ LAST UPDATED: 2011-08-19 --
Index: /issm/trunk/externalpackages/dyson/source_seek.sh
===================================================================
--- /issm/trunk/externalpackages/dyson/source_seek.sh	(revision 9571)
+++ /issm/trunk/externalpackages/dyson/source_seek.sh	(revision 9571)
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# SOURCE_SEEK.SH - Look for IP addresses and mention of 'password' in source files - 2009-10-05
+#
+if [ -n "${1}" ]; then
+  clear
+  echo "Checking for IP addresses"
+  echo "--------------------------------------------"
+  find $1 -name "*" -exec grep -il "128\.149\." {} \;
+  find $1 -name "*" -exec grep -il "137\.78\."  {} \;
+  find $1 -name "*" -exec grep -il "137\.79\."  {} \;
+  find $1 -name "*" -exec grep -il "137\.228\." {} \;
+  echo "--------------------------------------------"
+  echo "\nChecking for 'password'"
+  echo "--------------------------------------------"
+  find $1 -name "*" -exec grep -il "password"   {} \;
+  echo "--------------------------------------------"
+  echo "\nChecking for JPL user IDs"
+  echo "--------------------------------------------"
+  find $1 -name "*" -exec grep -ilf jplusers.db {} \;
+  echo "--------------------------------------------"
+else
+  echo -e "\nUSE: $0 <directory_of_source_files>\n";
+fi
+#
+# EOF - 2011-08-05 - Jay Dyson <jdyson@jpl.nasa.gov>
Index: /issm/trunk/externalpackages/export_fig/export_fig.m
===================================================================
--- /issm/trunk/externalpackages/export_fig/export_fig.m	(revision 9570)
+++ /issm/trunk/externalpackages/export_fig/export_fig.m	(revision 9571)
@@ -379,4 +379,5 @@
         print2eps(tmp_nam, fig, p2eArgs{:});
         % Generate a pdf
+		options.quality
         eps2pdf(tmp_nam, pdf_nam, 1, options.append, options.colourspace==2, options.quality);
     catch
Index: /issm/trunk/externalpackages/gdal/install.sh
===================================================================
--- /issm/trunk/externalpackages/gdal/install.sh	(revision 9570)
+++ /issm/trunk/externalpackages/gdal/install.sh	(revision 9571)
@@ -25,4 +25,5 @@
 cd src
 ./configure --prefix="$ISSM_TIER/externalpackages/gdal/install" --without-python --with-netcdf=no --with-jasper=no --without-ld-shared --with-unix-stdio-64=no --with-expat-lib=/usr/lib64/libexpat.so
+#./configure --prefix="$ISSM_TIER/externalpackages/gdal/install" --with-python --with-netcdf=no --with-jasper=no --without-ld-shared --with-unix-stdio-64=no --with-expat-lib=/usr/lib64/libexpat.so
 
 #Patch GDALmake.opt
Index: /issm/trunk/externalpackages/matlab/install.sh
===================================================================
--- /issm/trunk/externalpackages/matlab/install.sh	(revision 9570)
+++ /issm/trunk/externalpackages/matlab/install.sh	(revision 9571)
@@ -1,3 +1,6 @@
 #!/bin/bash
+
+#Matlab version: used by Petsc to detect some weird behaviour starting at version 7.6/R2008a (all blas and lapack prototypes changed! damn them!)
+MATLAB_VERSION=R2010b
 
 #Erase symlink
@@ -5,5 +8,5 @@
 
 #Select or create a new simlink
-ln -s /usr/local/pkgs/matlab-7.6/ install
+ln -s /usr/local/matlab711/ install
 #ln -s /usr/local/pkgs/matlab-7.8/ install
 #ln -s /Applications/MATLAB_R2009a.app/ install
Index: /issm/trunk/externalpackages/metis/install.sh
===================================================================
--- /issm/trunk/externalpackages/metis/install.sh	(revision 9570)
+++ /issm/trunk/externalpackages/metis/install.sh	(revision 9571)
@@ -6,5 +6,4 @@
 #version of metis
 version=`echo *.tar.gz | sed 's/\.tar\.gz//g' | sed 's/metis-//g'`
-echo $version
 
 #Some cleanup
Index: /issm/trunk/m4/issm_options.m4
===================================================================
--- /issm/trunk/m4/issm_options.m4	(revision 9570)
+++ /issm/trunk/m4/issm_options.m4	(revision 9571)
@@ -174,5 +174,5 @@
 		HAVE_DAKOTA=yes
 		DAKOTAINCL=-I$DAKOTA_ROOT/include
-		DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -lfftw3 -llhs -levidence -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -lopt -lpsuade -lnewmat -lncsuopt -lgsl -lquadrature -lcoliny -lcolin -lpebbl -lutilib -l3po -lnappspack -lappspack -lconveyor -lshared -lcdd -lamplsolver "
+		DAKOTALIB="-L$DAKOTA_ROOT/lib -ldakota -lteuchos -lpecos -lfftw3 -llhs -levidence -lsurfpack -lconmin -lddace -lfsudace -ljega -lcport -lopt -lpsuade -lnewmat -lncsuopt -lgsl -lgslcblas -lquadrature -lcoliny -lcolin -lpebbl -lutilib -l3po -lnappspack -lappspack -lconveyor -lshared -lcdd -lamplsolver"
 
 		AC_DEFINE([_HAVE_DAKOTA_],[1],[with Dakota in ISSM src])
Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9570)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 9571)
@@ -342,5 +342,5 @@
 	NumberOfVerticesEnum,
 	OutputFilePointerEnum,
-	QmuAnalysisEnum,
+	DakotaAnalysisEnum,
 	QmuErrNameEnum,
 	QmuInNameEnum,
@@ -474,4 +474,9 @@
 	NumberOfEdgesEnum,
 	ResultsOnVerticesEnum,
+	/*Automatic Differentiation {{{1*/
+	AdAnalysisEnum, 
+	AdForwardEnum,
+	AdReverseEnum,
+	/*}}}*/
 	MaximumNumberOfEnums
 };
Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 9570)
+++ /issm/trunk/src/c/Makefile.am	(revision 9571)
@@ -681,8 +681,8 @@
 					./modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.cpp\
 					./modules/PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h\
-					./modules/Qmux/Qmux.h\
-					./modules/Qmux/Qmux.cpp\
-					./modules/Qmux/SpawnCore.cpp\
-					./modules/Qmux/SpawnCoreSerial.cpp\
+					./modules/Dakotax/Dakotax.h\
+					./modules/Dakotax/Dakotax.cpp\
+					./modules/Dakotax/SpawnCore.cpp\
+					./modules/Dakotax/SpawnCoreSerial.cpp\
 					./modules/InputToResultx/InputToResultx.cpp\
 					./modules/InputToResultx/InputToResultx.h\
@@ -1360,10 +1360,10 @@
 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\
 					./modules/Mergesolutionfromftogx/Mergesolutionfromftogx.h\
-					./modules/Qmux/Qmux.h\
-					./modules/Qmux/Qmux.cpp\
-					./modules/Qmux/DakotaMPI_Bcast.cpp\
-					./modules/Qmux/DakotaFree.cpp\
-					./modules/Qmux/SpawnCore.cpp\
-					./modules/Qmux/SpawnCoreParallel.cpp\
+					./modules/Dakotax/Dakotax.h\
+					./modules/Dakotax/Dakotax.cpp\
+					./modules/Dakotax/DakotaMPI_Bcast.cpp\
+					./modules/Dakotax/DakotaFree.cpp\
+					./modules/Dakotax/SpawnCore.cpp\
+					./modules/Dakotax/SpawnCoreParallel.cpp\
 					./modules/InputToResultx/InputToResultx.cpp\
 					./modules/InputToResultx/InputToResultx.h\
@@ -1405,5 +1405,5 @@
 					./solutions/steadystateconvergence.cpp\
 					./solutions/ResetBoundaryConditions.cpp\
-					./solutions/SolutionConfiguration.cpp\
+					./solutions/AnalysisConfiguration.cpp\
 					./solutions/CorePointerFromSolutionEnum.cpp\
 					./solutions/AdjointCorePointerFromSolutionEnum.cpp\
Index: /issm/trunk/src/c/modules/Dakotax/DakotaFree.cpp
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/DakotaFree.cpp	(revision 9571)
+++ /issm/trunk/src/c/modules/Dakotax/DakotaFree.cpp	(revision 9571)
@@ -0,0 +1,57 @@
+/*!\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;
+	
+	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){
+		xfree((void**)&variables);
+		for(i=0;i<numvariables;i++){
+			string=variables_descriptors[i];
+			xfree((void**)&string);
+		}
+		xfree((void**)&variables_descriptors);
+	}
+	
+	//responses descriptors on every cpu
+	for(i=0;i<numresponses;i++){
+		string=responses_descriptors[i];
+		xfree((void**)&string);
+	}
+	//rest of dynamic allocations.
+	xfree((void**)&responses_descriptors);
+
+	/*Assign output pointers:*/
+	*pvariables=variables;
+	*pvariables_descriptors=variables_descriptors;
+	*presponses_descriptors=responses_descriptors;
+}
+
Index: /issm/trunk/src/c/modules/Dakotax/DakotaMPI_Bcast.cpp
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/DakotaMPI_Bcast.cpp	(revision 9571)
+++ /issm/trunk/src/c/modules/Dakotax/DakotaMPI_Bcast.cpp	(revision 9571)
@@ -0,0 +1,65 @@
+/*!\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;
+
+	/*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=(double*)xmalloc(numvariables*sizeof(double));
+	MPI_Bcast(variables,numvariables,MPI_DOUBLE,0,MPI_COMM_WORLD); 
+
+	/*variables_descriptors: */
+	if(my_rank!=0){
+		variables_descriptors=(char**)xmalloc(numvariables*sizeof(char*));
+	}
+	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=(char*)xmalloc(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: /issm/trunk/src/c/modules/Dakotax/Dakotax.cpp
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/Dakotax.cpp	(revision 9571)
+++ /issm/trunk/src/c/modules/Dakotax/Dakotax.cpp	(revision 9571)
@@ -0,0 +1,155 @@
+/*!\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 "../../objects/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
+
+#ifdef _SERIAL_
+void Dakotax(mxArray* femmodel){ 
+#else
+void Dakotax(FemModel* femmodel){ 
+#endif
+
+
+	#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: */
+	#ifdef _SERIAL_
+	FetchMatlabData((DataSet**)&parameters,mxGetField((mxArray*)femmodel,0,"parameters"));
+	#else
+	parameters=femmodel->parameters;
+	#endif
+
+	PetscSynchronizedPrintf(MPI_COMM_WORLD,"hello %i\n",my_rank);
+	PetscSynchronizedFlush(MPI_COMM_WORLD);
+
+
+
+	/*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);
+
+	#ifdef _PARALLEL_
+	if(my_rank==0){
+	#endif
+	
+		// Instantiate/initialize the parallel library and problem description
+		// database objects.
+		#ifdef _SERIAL_
+			Dakota::ParallelLibrary parallel_lib; //use Dakota's standard library mode constructor
+		#else
+			Dakota::ParallelLibrary parallel_lib("serial"); //use our own ISSM Dakota library mode constructor, which only fires up Dakota on CPU 0. 
+		#endif
+		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();
+		
+		#ifdef _PARALLEL_
+		//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);
+		#endif
+
+	#ifdef _PARALLEL_
+	}
+	else{
+
+		for(;;){
+			if(!SpawnCore(NULL,0, NULL,NULL,0,femmodel,0))break; //counter came in at -1 on cpu0, bail out.
+		}
+	}
+	#endif //#ifdef _PARALLEL_
+
+	/*Free ressources:*/
+	xfree((void**)&dakota_input_file);
+	xfree((void**)&dakota_error_file);
+	xfree((void**)&dakota_output_file);
+
+	#ifdef _SERIAL_
+	delete parameters;
+	#endif
+
+	#endif //#ifdef _HAVE_DAKOTA_
+}
Index: /issm/trunk/src/c/modules/Dakotax/Dakotax.h
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/Dakotax.h	(revision 9571)
+++ /issm/trunk/src/c/modules/Dakotax/Dakotax.h	(revision 9571)
@@ -0,0 +1,25 @@
+/*!\file:  Dakotax.h
+ * \brief header file for Qmu engine using Dakota
+ */ 
+
+#ifndef _DAKOTAX_H
+#define _DAKOTAX_H
+
+#include "../../Container/Container.h"
+#include "../../objects/objects.h"
+
+/* local prototypes: */
+int SpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+
+#ifdef _SERIAL_
+void Dakotax(mxArray* femmodel);
+void SpawnCoreSerial(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, mxArray* femmodel,int counter);
+#else
+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);
+#endif
+
+#endif  /* _DAKOTAX_H */
Index: /issm/trunk/src/c/modules/Dakotax/SpawnCore.cpp
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/SpawnCore.cpp	(revision 9571)
+++ /issm/trunk/src/c/modules/Dakotax/SpawnCore.cpp	(revision 9571)
@@ -0,0 +1,32 @@
+/*!\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 "../../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: */
+
+	#ifdef _SERIAL_
+		SpawnCoreSerial(responses, numresponses, variables, variables_descriptors,numvariables, (mxArray*)femmodel, counter);
+	#else
+		/*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);
+	#endif
+	return 1;
+}
Index: /issm/trunk/src/c/modules/Dakotax/SpawnCoreParallel.cpp
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/SpawnCoreParallel.cpp	(revision 9571)
+++ /issm/trunk/src/c/modules/Dakotax/SpawnCoreParallel.cpp	(revision 9571)
@@ -0,0 +1,82 @@
+/*!\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 "../../objects/objects.h"
+#include "../../io/io.h"
+#include "../../EnumDefinitions/EnumDefinitions.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);
+	_printf_(VerboseQmu(),"qmu iteration: %i\n",counter);
+	
+	/*retrieve parameters: */
+	femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,ResponsedescriptorsEnum);
+	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
+	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+
+	/* 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: */
+	_printf_(VerboseQmu(),"%s%s%s\n","Starting ",EnumToStringx(solution_type)," core:");
+	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
+	if(control_analysis)solutioncore=&control_core;
+
+	/*Run the core solution sequence: */
+	solutioncore(femmodel);
+
+	/*compute responses: */
+	_printf_(VerboseQmu(),"compute dakota responses:\n");
+	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: /issm/trunk/src/c/modules/Dakotax/SpawnCoreSerial.cpp
===================================================================
--- /issm/trunk/src/c/modules/Dakotax/SpawnCoreSerial.cpp	(revision 9571)
+++ /issm/trunk/src/c/modules/Dakotax/SpawnCoreSerial.cpp	(revision 9571)
@@ -0,0 +1,71 @@
+/*!\file:  SpawnCoreSerial.cpp
+ * \brief: run core ISSM solution using Dakota inputs. Call the Serial core solution, using mexCallMATLAB
+ * \sa SpawnCore.cpp SpawnCoreParallel.cpp
+ *
+ */ 
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+
+#include "../../objects/objects.h"
+#include "../../io/io.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+#include "../../shared/shared.h"
+#include "./Dakotax.h"
+#include "../../include/include.h"
+
+void SpawnCoreSerial(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, mxArray* femmodel, int counter){
+
+	int i;
+
+	//inputs to matlab routine
+	mxArray* mxvariables=NULL;
+	double*  variables_copy=NULL;
+	mxArray* mxvariabledescriptors=NULL;
+	mxArray* mxcounter=NULL;
+	mwSize   dims[2]={0};
+
+	//mexCallMATLAB arrays
+	mxArray* array[4];
+
+	//output from SpawnCore in matlab routine.
+	mxArray* mxresponses=NULL;
+
+	/*Create variables and variable descriptors mxArrays that we will feed to the core solution for update of the inputs: */
+	mxvariables=mxCreateDoubleMatrix(numvariables,1,mxREAL);
+	variables_copy=(double*)xmalloc(numvariables*sizeof(double));
+	memcpy(variables_copy,variables,numvariables*sizeof(double));
+	mxSetPr(mxvariables,variables_copy);
+
+	dims[0]=numvariables;
+	dims[1]=1;
+	mxvariabledescriptors=mxCreateCellArray(2,dims);
+	for(i=0;i<numvariables;i++){
+		mxSetCell(mxvariabledescriptors,i,mxCreateString(variables_descriptors[i]));
+	}
+
+	mxcounter=mxCreateDoubleScalar((double)counter);
+
+	//call SpwanCore matlab routine.
+	array[0]=femmodel;
+	array[1]=mxvariables;
+	array[2]=mxvariabledescriptors;
+	array[3]=mxcounter;
+
+	mexCallMATLAB(1,&mxresponses,4,array,"SpawnCore");
+
+	/*copy responses back to dakota: */
+	memcpy(responses,mxGetPr(mxresponses),numresponses*sizeof(double));
+
+	//destroy constructed arrays: 
+	mxDestroyArray(mxvariables);
+	mxDestroyArray(mxvariabledescriptors);
+	mxDestroyArray(mxresponses);
+	mxDestroyArray(mxcounter);
+
+}
+
Index: /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp
===================================================================
--- /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9570)
+++ /issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp	(revision 9571)
@@ -293,5 +293,5 @@
 		case NumberOfVerticesEnum : return "NumberOfVertices";
 		case OutputFilePointerEnum : return "OutputFilePointer";
-		case QmuAnalysisEnum : return "QmuAnalysis";
+		case DakotaAnalysisEnum : return "DakotaAnalysis";
 		case QmuErrNameEnum : return "QmuErrName";
 		case QmuInNameEnum : return "QmuInName";
@@ -417,4 +417,7 @@
 		case NumberOfEdgesEnum : return "NumberOfEdges";
 		case ResultsOnVerticesEnum : return "ResultsOnVertices";
+		case AdAnalysisEnum : return "AdAnalysis";
+		case AdForwardEnum : return "AdForward";
+		case AdReverseEnum : return "AdReverse";
 		default : return "unknown";
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9570)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 9571)
@@ -21,5 +21,5 @@
 	bool   isstokes;
 	bool   control_analysis;
-	bool   qmu_analysis;
+	bool   dakota_analysis;
 
 	/*Fetch constants needed: */
@@ -29,5 +29,5 @@
 	iomodel->Constant(&numberofelements,NumberOfElementsEnum);
 	iomodel->Constant(&control_analysis,ControlAnalysisEnum);
-	iomodel->Constant(&qmu_analysis,QmuAnalysisEnum);
+	iomodel->Constant(&dakota_analysis,DakotaAnalysisEnum);
 
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
@@ -82,14 +82,14 @@
 	elements->InputDuplicate(VxEnum,VxPicardEnum);
 	elements->InputDuplicate(VxEnum,VxObsEnum);
-	if(qmu_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
+	if(dakota_analysis)elements->InputDuplicate(VxEnum,QmuVxEnum);
 	
 	elements->InputDuplicate(VyEnum,VyPicardEnum);
 	elements->InputDuplicate(VyEnum,VyObsEnum);
-	if(qmu_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
+	if(dakota_analysis)elements->InputDuplicate(VyEnum,QmuVyEnum);
 	
 	if(dim==3){
 		elements->InputDuplicate(VzEnum,VzPicardEnum);
 		elements->InputDuplicate(VzEnum,VzObsEnum);
-		if(qmu_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
+		if(dakota_analysis)elements->InputDuplicate(VzEnum,QmuVzEnum);
 	}
 	
Index: /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9570)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9571)
@@ -52,5 +52,5 @@
 	int      m,n;
 	int      count;
-	bool     qmu_analysis=false;
+	bool     dakota_analysis=false;
 	char*    name=NULL;
 	int      numberofresponses;
@@ -63,8 +63,8 @@
 
 	/*recover parameters: */
-	iomodel->Constant(&qmu_analysis,QmuAnalysisEnum);
-	parameters->AddObject(new BoolParam(QmuAnalysisEnum,qmu_analysis));
-
-	if(qmu_analysis){
+	iomodel->Constant(&dakota_analysis,DakotaAnalysisEnum);
+	parameters->AddObject(new BoolParam(DakotaAnalysisEnum,dakota_analysis));
+
+	if(dakota_analysis){
 
 		iomodel->Constant(&name,NameEnum);
@@ -216,5 +216,5 @@
 		xfree((void**)&qmuoutname);
 		/*}}}*/
-	} //if(qmu_analysis)
+	} //if(dakota_analysis)
 
 	/*Free data*/
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 9570)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/UpdateElementsThermal.cpp	(revision 9571)
@@ -18,10 +18,10 @@
 	int    dim;
 	int    numberofelements;
-	bool   qmu_analysis;
+	bool   dakota_analysis;
 
 	/*Fetch parameters: */
 	iomodel->Constant(&dim,DimEnum);
 	iomodel->Constant(&numberofelements,NumberOfElementsEnum);
-	iomodel->Constant(&qmu_analysis,QmuAnalysisEnum);
+	iomodel->Constant(&dakota_analysis,DakotaAnalysisEnum);
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -61,5 +61,5 @@
 	iomodel->FetchDataToInput(elements,VzEnum);
 	
-	if(qmu_analysis)elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
+	if(dakota_analysis)elements->InputDuplicate(TemperatureEnum,QmuTemperatureEnum);
 
 	/*Free data: */
Index: /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 9570)
+++ /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 9571)
@@ -29,7 +29,27 @@
 	int         solutiontype;
 	Results    *results                 = NULL;
+	bool        dakota_analysis            = false;
+	
+	#ifdef _SERIAL_
+	const char **fnames      = NULL;
+	mwSize       onebyone[2] = {0,0};
+	mwSize       ndim        = 2;
+	int          nfields=0;
+	#endif
 
 	/*recover results dataset: */
 	results=*presults;
+
+	/*retrieve parameters: */
+	parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
+
+	if(dakota_analysis){
+		//no need to output anything, Dakota analysis has different outputs
+		#ifdef _SERIAL_
+		*pdataref=mxCreateStructArray( ndim,onebyone,nfields,fnames);
+		#else
+		return; 
+		#endif
+	}
 
 	/*We have results inside our elements, loads, etc ... Get them out of there, into the results dataset: */
Index: /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp
===================================================================
--- /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9570)
+++ /issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp	(revision 9571)
@@ -291,5 +291,5 @@
 	else if (strcmp(name,"NumberOfVertices")==0) return NumberOfVerticesEnum;
 	else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
-	else if (strcmp(name,"QmuAnalysis")==0) return QmuAnalysisEnum;
+	else if (strcmp(name,"DakotaAnalysis")==0) return DakotaAnalysisEnum;
 	else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum;
 	else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum;
@@ -415,4 +415,7 @@
 	else if (strcmp(name,"NumberOfEdges")==0) return NumberOfEdgesEnum;
 	else if (strcmp(name,"ResultsOnVertices")==0) return ResultsOnVerticesEnum;
+	else if (strcmp(name,"AdAnalysis")==0) return AdAnalysisEnum;
+	else if (strcmp(name,"AdForward")==0) return AdForwardEnum;
+	else if (strcmp(name,"AdReverse")==0) return AdReverseEnum;
 	else _error_("Enum %s not found",name);
 
Index: /issm/trunk/src/c/modules/modules.h
===================================================================
--- /issm/trunk/src/c/modules/modules.h	(revision 9570)
+++ /issm/trunk/src/c/modules/modules.h	(revision 9571)
@@ -88,5 +88,5 @@
 #include "./PointCloudFindNeighborsx/PointCloudFindNeighborsx.h"
 #include "./PropagateFlagsFromConnectivityx/PropagateFlagsFromConnectivityx.h"
-#include "./Qmux/Qmux.h"
+#include "./Dakotax/Dakotax.h"
 #include "./Reduceloadx/Reduceloadx.h"
 #include "./Reducevectorgtosx/Reducevectorgtosx.h"
Index: /issm/trunk/src/c/objects/DakotaPlugin.cpp
===================================================================
--- /issm/trunk/src/c/objects/DakotaPlugin.cpp	(revision 9570)
+++ /issm/trunk/src/c/objects/DakotaPlugin.cpp	(revision 9571)
@@ -26,5 +26,5 @@
 #include "../include/include.h"
 #include "../objects/objects.h"
-#include "../modules/Qmux/Qmux.h"
+#include "../modules/Dakotax/Dakotax.h"
 
 /*Standard includes: */
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9570)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 9571)
@@ -7498,5 +7498,5 @@
 	double  yts;
 	int     prognostic_DG;
-	bool    qmu_analysis;
+	bool    dakota_analysis;
 	bool    isstokes;
 	double  beta,heatcapacity,referencetemperature,meltingpoint,latentheat;
@@ -7505,5 +7505,5 @@
 	iomodel->Constant(&yts,YtsEnum);
 	iomodel->Constant(&prognostic_DG,PrognosticDGEnum);
-	iomodel->Constant(&qmu_analysis,QmuAnalysisEnum);
+	iomodel->Constant(&dakota_analysis,DakotaAnalysisEnum);
 	iomodel->Constant(&isstokes,IsstokesEnum);
 	iomodel->Constant(&beta,BetaEnum);
@@ -7557,5 +7557,5 @@
 				this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
 				this->inputs->AddInput(new PentaVertexInput(VxPicardEnum,nodeinputs));
-				if(qmu_analysis) this->inputs->AddInput(new PentaVertexInput(QmuVxEnum,nodeinputs));
+				if(dakota_analysis) this->inputs->AddInput(new PentaVertexInput(QmuVxEnum,nodeinputs));
 			}
 			if(!iomodel->Data(VyEnum)){
@@ -7564,5 +7564,5 @@
 				this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
 				this->inputs->AddInput(new PentaVertexInput(VyPicardEnum,nodeinputs));
-				if(qmu_analysis) this->inputs->AddInput(new PentaVertexInput(QmuVyEnum,nodeinputs));
+				if(dakota_analysis) this->inputs->AddInput(new PentaVertexInput(QmuVyEnum,nodeinputs));
 			}
 			if(!iomodel->Data(VzEnum)){
@@ -7571,9 +7571,9 @@
 				this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
 				this->inputs->AddInput(new PentaVertexInput(VzPicardEnum,nodeinputs));
-				if(qmu_analysis) this->inputs->AddInput(new PentaVertexInput(QmuVzEnum,nodeinputs));
+				if(dakota_analysis) this->inputs->AddInput(new PentaVertexInput(QmuVzEnum,nodeinputs));
 			}
 			if(!iomodel->Data(PressureEnum)){
 				for(i=0;i<6;i++)nodeinputs[i]=0;
-				if(qmu_analysis){
+				if(dakota_analysis){
 					this->inputs->AddInput(new PentaVertexInput(PressureEnum,nodeinputs));
 					this->inputs->AddInput(new PentaVertexInput(QmuPressureEnum,nodeinputs));
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9570)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 9571)
@@ -5210,5 +5210,5 @@
 	double yts;
 	int    prognostic_DG;
-	bool   qmu_analysis;
+	bool   dakota_analysis;
 
 	/*Checks if debuging*/
@@ -5220,5 +5220,5 @@
 	iomodel->Constant(&yts,YtsEnum);
 	iomodel->Constant(&prognostic_DG,PrognosticDGEnum);
-	iomodel->Constant(&qmu_analysis,QmuAnalysisEnum);
+	iomodel->Constant(&dakota_analysis,DakotaAnalysisEnum);
 
 	/*Recover element type*/
@@ -5269,5 +5269,5 @@
 				this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
 				this->inputs->AddInput(new TriaVertexInput(VxPicardEnum,nodeinputs));
-				if(qmu_analysis) this->inputs->AddInput(new TriaVertexInput(QmuVxEnum,nodeinputs));
+				if(dakota_analysis) this->inputs->AddInput(new TriaVertexInput(QmuVxEnum,nodeinputs));
 			}
 			if(!iomodel->Data(VyEnum)){
@@ -5276,5 +5276,5 @@
 				this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
 				this->inputs->AddInput(new TriaVertexInput(VyPicardEnum,nodeinputs));
-				if(qmu_analysis) this->inputs->AddInput(new TriaVertexInput(QmuVyEnum,nodeinputs));
+				if(dakota_analysis) this->inputs->AddInput(new TriaVertexInput(QmuVyEnum,nodeinputs));
 			}
 			if(!iomodel->Data(VzEnum)){
@@ -5283,9 +5283,9 @@
 				this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
 				this->inputs->AddInput(new TriaVertexInput(VzPicardEnum,nodeinputs));
-				if(qmu_analysis) this->inputs->AddInput(new TriaVertexInput(QmuVzEnum,nodeinputs));
+				if(dakota_analysis) this->inputs->AddInput(new TriaVertexInput(QmuVzEnum,nodeinputs));
 			}
 			if(!iomodel->Data(PressureEnum)){
 				for(i=0;i<3;i++)nodeinputs[i]=0;
-				if(qmu_analysis){
+				if(dakota_analysis){
 					this->inputs->AddInput(new TriaVertexInput(PressureEnum,nodeinputs));
 					this->inputs->AddInput(new TriaVertexInput(QmuPressureEnum,nodeinputs));
Index: /issm/trunk/src/c/solutions/AnalysisConfiguration.cpp
===================================================================
--- /issm/trunk/src/c/solutions/AnalysisConfiguration.cpp	(revision 9571)
+++ /issm/trunk/src/c/solutions/AnalysisConfiguration.cpp	(revision 9571)
@@ -0,0 +1,125 @@
+/*!\file:  AnalysisConfiguration.cpp
+ * \brief: return type of analyses, number of analyses 
+ */ 
+
+#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 "../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 AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype){
+
+	/*output: */
+	int  numanalyses;
+	int* analyses=NULL;
+
+	/*Analyses lists*/
+	switch(solutiontype){
+	
+		case DiagnosticSolutionEnum:
+			numanalyses=5;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=DiagnosticHorizAnalysisEnum;
+			analyses[1]=DiagnosticVertAnalysisEnum;
+			analyses[2]=DiagnosticHutterAnalysisEnum;
+			analyses[3]=SurfaceSlopeAnalysisEnum;
+			analyses[4]=BedSlopeAnalysisEnum;
+			break;
+
+		case SteadystateSolutionEnum:
+			numanalyses=7;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=DiagnosticHorizAnalysisEnum;
+			analyses[1]=DiagnosticVertAnalysisEnum;
+			analyses[2]=DiagnosticHutterAnalysisEnum;
+			analyses[3]=SurfaceSlopeAnalysisEnum;
+			analyses[4]=BedSlopeAnalysisEnum;
+			analyses[5]=ThermalAnalysisEnum;
+			analyses[6]=MeltingAnalysisEnum;
+			break;
+
+		case ThermalSolutionEnum:
+			numanalyses=2;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=ThermalAnalysisEnum;
+			analyses[1]=MeltingAnalysisEnum;
+			break;
+		
+		case EnthalpySolutionEnum:
+			numanalyses=1;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=EnthalpyAnalysisEnum;
+			break;
+		
+		case HydrologySolutionEnum:
+			numanalyses=3;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=HydrologyAnalysisEnum;
+			analyses[1]=SurfaceSlopeAnalysisEnum;
+			analyses[2]=BedSlopeAnalysisEnum;
+			break;
+
+		case PrognosticSolutionEnum:
+			numanalyses=1;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=PrognosticAnalysisEnum;
+			break;
+
+		case BalancethicknessSolutionEnum:
+			numanalyses=1;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=BalancethicknessAnalysisEnum;
+			break;
+
+		case SurfaceSlopeSolutionEnum:
+			numanalyses=1;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=SurfaceSlopeAnalysisEnum;
+			break;
+
+		case BedSlopeSolutionEnum:
+			numanalyses=1;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=BedSlopeAnalysisEnum;
+			break;
+
+		case TransientSolutionEnum:
+			numanalyses=8;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=DiagnosticHorizAnalysisEnum;
+			analyses[1]=DiagnosticVertAnalysisEnum;
+			analyses[2]=DiagnosticHutterAnalysisEnum;
+			analyses[3]=SurfaceSlopeAnalysisEnum;
+			analyses[4]=BedSlopeAnalysisEnum;
+			analyses[5]=ThermalAnalysisEnum;
+			analyses[6]=MeltingAnalysisEnum;
+			analyses[7]=PrognosticAnalysisEnum;
+			break;
+		
+		case GroundinglineMigration2DSolutionEnum:
+			numanalyses=2;
+			analyses=(int*)xmalloc(numanalyses*sizeof(int));
+			analyses[0]=DiagnosticHorizAnalysisEnum;
+			analyses[1]=PrognosticAnalysisEnum;
+			break;
+
+		default:
+			_error_("%s%s%s"," solution type: ",EnumToStringx(solutiontype)," not supported yet!");
+			break;
+	}
+
+	/*Assign output pointers:*/
+	if(pnumanalyses) *pnumanalyses=numanalyses;
+	if(panalyses)    *panalyses=analyses;
+	else              xfree((void**)&analyses);
+}
Index: /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 9570)
+++ /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 9571)
@@ -18,8 +18,16 @@
 #include "../solvers/solvers.h"
 
-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),int solutiontype){
+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
 
+	/*intermediary: */
+	bool control_analysis=false;
+	bool dakota_analysis=false;
+	
 	/*output: */
 	void (*solutioncore)(FemModel*)=NULL;
+
+	/*retrieve some parameters: */
+	parameters->FindParam(&control_analysis,ControlAnalysisEnum);
+	parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
 
 	switch(solutiontype){
@@ -63,4 +71,20 @@
 	}
 	
+	/*if control is being run on top of a solution, change core: */
+	if(control_analysis){
+		#ifdef _HAVE_TAO_
+		//solutioncore=&controltao_core;
+		solutioncore=&control_core;
+		#else
+		solutioncore=&control_core;
+		#endif
+	}	
+		
+	if(dakota_analysis){
+		#ifndef _HAVE_DAKOTA_ 
+		_error_(" Dakota not present, cannot do qmu!");
+		#endif
+	}
+
 	/*Assign output pointer:*/
 	_assert_(psolutioncore);
Index: sm/trunk/src/c/solutions/SolutionConfiguration.cpp
===================================================================
--- /issm/trunk/src/c/solutions/SolutionConfiguration.cpp	(revision 9570)
+++ 	(revision )
@@ -1,130 +1,0 @@
-/*!\file:  SolutionConfiguration.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 "../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 SolutionConfiguration(int** panalyses,int* pnumanalyses, void (**psolutioncore)(FemModel*),int solutiontype){
-
-	/*output: */
-	int  numanalyses;
-	int* analyses=NULL;
-	void (*solutioncore)(FemModel*)=NULL;
-
-	/*Get Core pointer*/
-	CorePointerFromSolutionEnum(&solutioncore,solutiontype);
-
-	/*Analyses lists*/
-	switch(solutiontype){
-	
-		case DiagnosticSolutionEnum:
-			numanalyses=5;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=DiagnosticHorizAnalysisEnum;
-			analyses[1]=DiagnosticVertAnalysisEnum;
-			analyses[2]=DiagnosticHutterAnalysisEnum;
-			analyses[3]=SurfaceSlopeAnalysisEnum;
-			analyses[4]=BedSlopeAnalysisEnum;
-			break;
-
-		case SteadystateSolutionEnum:
-			numanalyses=7;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=DiagnosticHorizAnalysisEnum;
-			analyses[1]=DiagnosticVertAnalysisEnum;
-			analyses[2]=DiagnosticHutterAnalysisEnum;
-			analyses[3]=SurfaceSlopeAnalysisEnum;
-			analyses[4]=BedSlopeAnalysisEnum;
-			analyses[5]=ThermalAnalysisEnum;
-			analyses[6]=MeltingAnalysisEnum;
-			break;
-
-		case ThermalSolutionEnum:
-			numanalyses=2;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=ThermalAnalysisEnum;
-			analyses[1]=MeltingAnalysisEnum;
-			break;
-		
-		case EnthalpySolutionEnum:
-			numanalyses=1;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=EnthalpyAnalysisEnum;
-			break;
-		
-		case HydrologySolutionEnum:
-			numanalyses=3;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=HydrologyAnalysisEnum;
-			analyses[1]=SurfaceSlopeAnalysisEnum;
-			analyses[2]=BedSlopeAnalysisEnum;
-			break;
-
-		case PrognosticSolutionEnum:
-			numanalyses=1;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=PrognosticAnalysisEnum;
-			break;
-
-		case BalancethicknessSolutionEnum:
-			numanalyses=1;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=BalancethicknessAnalysisEnum;
-			break;
-
-		case SurfaceSlopeSolutionEnum:
-			numanalyses=1;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=SurfaceSlopeAnalysisEnum;
-			break;
-
-		case BedSlopeSolutionEnum:
-			numanalyses=1;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=BedSlopeAnalysisEnum;
-			break;
-
-		case TransientSolutionEnum:
-			numanalyses=8;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=DiagnosticHorizAnalysisEnum;
-			analyses[1]=DiagnosticVertAnalysisEnum;
-			analyses[2]=DiagnosticHutterAnalysisEnum;
-			analyses[3]=SurfaceSlopeAnalysisEnum;
-			analyses[4]=BedSlopeAnalysisEnum;
-			analyses[5]=ThermalAnalysisEnum;
-			analyses[6]=MeltingAnalysisEnum;
-			analyses[7]=PrognosticAnalysisEnum;
-			break;
-		
-		case GroundinglineMigration2DSolutionEnum:
-			numanalyses=2;
-			analyses=(int*)xmalloc(numanalyses*sizeof(int));
-			analyses[0]=DiagnosticHorizAnalysisEnum;
-			analyses[1]=PrognosticAnalysisEnum;
-			break;
-
-		default:
-			_error_("%s%s%s"," solution type: ",EnumToStringx(solutiontype)," not supported yet!");
-			break;
-	}
-	
-	/*Assign output pointers:*/
-	if(pnumanalyses) *pnumanalyses=numanalyses;
-	if(panalyses)    *panalyses=analyses;
-	else              xfree((void**)&analyses);
-	if(psolutioncore)*psolutioncore=solutioncore;
-}
Index: /issm/trunk/src/c/solutions/control_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/control_core.cpp	(revision 9570)
+++ /issm/trunk/src/c/solutions/control_core.cpp	(revision 9571)
@@ -24,5 +24,5 @@
 	int     solution_type;
 	bool    isstokes;
-	bool    qmu_analysis=false;
+	bool    dakota_analysis=false;
 
 	int*    control_type = NULL;
@@ -57,8 +57,8 @@
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 	femmodel->parameters->FindParam(&isstokes,IsstokesEnum);
-	femmodel->parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
+	femmodel->parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
 
 	/*out of solution_type, figure out solution core and adjoint function pointer*/
-	CorePointerFromSolutionEnum(&solutioncore,solution_type);
+	CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
 	AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
 
@@ -118,5 +118,5 @@
 
 	/*some results not computed by steadystate_core or diagnostic_core: */
-	if(!qmu_analysis){ //do not save this if we are running the control core from a qmu run!
+	if(!dakota_analysis){ //do not save this if we are running the control core from a qmu run!
 		for(i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
 		femmodel->results->AddObject(new DoubleVecExternalResult(femmodel->results->Size()+1,JEnum,J,nsteps,1,0));
Index: /issm/trunk/src/c/solutions/controlrestart.cpp
===================================================================
--- /issm/trunk/src/c/solutions/controlrestart.cpp	(revision 9570)
+++ /issm/trunk/src/c/solutions/controlrestart.cpp	(revision 9571)
@@ -12,5 +12,5 @@
 	int*     control_type = NULL;
 	int      nsteps;
-	bool     qmu_analysis=true;
+	bool     dakota_analysis=true;
 
 	/*retrieve output file name: */
@@ -18,9 +18,9 @@
 	femmodel->parameters->FindParam(&control_type,NULL,ControlTypeEnum);
 	femmodel->parameters->FindParam(&nsteps,NstepsEnum);
-	femmodel->parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
+	femmodel->parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
 
 	/*only save if we are not running qmu analysis. We certainly don't want to save control results each time we 
 	 * run on control core!: */
-	if(!qmu_analysis){
+	if(!dakota_analysis){
 		/*we essentially want J and the parameter: */
 		for(int i=0;i<num_controls;i++) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,control_type[i]);
Index: /issm/trunk/src/c/solutions/diagnostic_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 9570)
+++ /issm/trunk/src/c/solutions/diagnostic_core.cpp	(revision 9571)
@@ -15,5 +15,5 @@
 
 	/*parameters: */
-	bool   qmu_analysis         = false;
+	bool   dakota_analysis         = false;
 	int    dim                  = -1;
 	bool   ishutter             = false;
@@ -30,10 +30,10 @@
 	femmodel->parameters->FindParam(&ismacayealpattyn,IsmacayealpattynEnum);
 	femmodel->parameters->FindParam(&isstokes,IsstokesEnum);
-	femmodel->parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
+	femmodel->parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
 	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
 
 	/*for qmu analysis, reinitialize velocity so that fake sensitivities do not show up as a result of a different restart of the convergence at each trial.*/
-	if(qmu_analysis){
+	if(dakota_analysis){
 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVxEnum,VxEnum);
 		InputDuplicatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,QmuVyEnum,VyEnum);
Index: /issm/trunk/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk/src/c/solutions/issm.cpp	(revision 9570)
+++ /issm/trunk/src/c/solutions/issm.cpp	(revision 9571)
@@ -14,7 +14,6 @@
 	FILE *output_fid       = NULL;
 	FILE *petscoptionsfid  = NULL;
-	bool  qmu_analysis     = false;
-	bool  control_analysis = false;
 	bool  waitonlock       = false;
+	bool  dakota_analysis  = false;
 
 	/*FemModel: */
@@ -67,10 +66,12 @@
 	MPI_Barrier(MPI_COMM_WORLD); start_init=MPI_Wtime();
 
-	/*out of solution_type, figure out solution core function pointer, 
-	 *and types of analyses needed: */
-	SolutionConfiguration(&analyses,&numanalyses,&solutioncore,solution_type);
-
+	/*out of solution_type, figure out types of analyses needed in the femmodel: */
+	AnalysisConfiguration(&analyses,&numanalyses,solution_type);
+	
 	/*Create femmodel, using input file: */
 	femmodel=new FemModel(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*/
@@ -84,43 +85,19 @@
 
 	/*get parameters: */
-	femmodel->parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
-	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
 	femmodel->parameters->FindParam(&waitonlock,WaitonlockEnum);
+	femmodel->parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
 
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
 
-	/*if control is being run on top of a solution, change core: */
-	if(control_analysis){
-		#ifdef _HAVE_TAO_
-		//solutioncore=&controltao_core;
-		solutioncore=&control_core;
-		#else
-		solutioncore=&control_core;
-		#endif
-	}
+	/*are we running the solution sequence, or a qmu wrapper around it? : */
 
-	/*are we running the solution sequence, or a qmu wrapper around it? : */
-	if(!qmu_analysis){
-			
-		_printf_(true,"call computational core:\n");
-		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		solutioncore(femmodel);
-		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
+	_printf_(true,"call computational core:\n");
+	MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
+	if(dakota_analysis) Dakotax(femmodel);
+	else                solutioncore(femmodel);
+	MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
-		_printf_(true,"write results to disk:\n");
-		OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,&femmodel->results);
-	}
-	else{
-		/*run qmu analysis: */
-		_printf_(true,"calling qmu analysis on diagnostic core:\n");
-
-		#ifdef _HAVE_DAKOTA_ 
-		MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-		Qmux(femmodel,femmodel->parameters);
-		MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
-	 	#else
-		_error_(" Dakota not present, cannot do qmu!");
-		#endif
-	}
+	_printf_(true,"write results to disk:\n");
+	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*/
Index: /issm/trunk/src/c/solutions/solutions.h
===================================================================
--- /issm/trunk/src/c/solutions/solutions.h	(revision 9570)
+++ /issm/trunk/src/c/solutions/solutions.h	(revision 9571)
@@ -48,6 +48,6 @@
 
 //solution configuration
-void SolutionConfiguration(int** panalyses,int* pnumanalyses, void (**psolutioncore)(FemModel*),int solutiontype);
-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),int solutiontype);
+void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
 void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
 
Index: /issm/trunk/src/c/solutions/thermal_core.cpp
===================================================================
--- /issm/trunk/src/c/solutions/thermal_core.cpp	(revision 9570)
+++ /issm/trunk/src/c/solutions/thermal_core.cpp	(revision 9571)
@@ -24,5 +24,5 @@
 	bool control_analysis;
 	int solution_type;
-	bool   qmu_analysis         = false;
+	bool   dakota_analysis         = false;
 
 	//first recover parameters common to all solutions
@@ -31,5 +31,5 @@
 	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
-	femmodel->parameters->FindParam(&qmu_analysis,QmuAnalysisEnum);
+	femmodel->parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
 
 	/*Compute number of time steps: */
@@ -40,5 +40,5 @@
 	else nsteps=(int)(ndt/dt);
 
-	if(qmu_analysis){
+	if(dakota_analysis){
 		femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
 		ResetConstraintsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
Index: /issm/trunk/src/m/classes/clusters/castor.m
===================================================================
--- /issm/trunk/src/m/classes/clusters/castor.m	(revision 9570)
+++ /issm/trunk/src/m/classes/clusters/castor.m	(revision 9571)
@@ -94,5 +94,5 @@
 				%compress the files into one zip.
 				compressstring=['tar -zcf ' md.runtimename '.tar.gz ' md.name '.bin ' md.name '.queue '  md.name '.petsc '];
-				if md.qmu_analysis,
+				if md.dakota_analysis,
 					compressstring=[compressstring md.name '.qmu.in'];
 				end
@@ -124,5 +124,5 @@
 			%What packages are we picking up from remote cluster
 			packages={[md.name '.outlog'],[md.name '.errlog']};
-			if md.qmu_analysis,
+			if md.dakota_analysis,
 				packages{end+1}=[md.name '.qmu.err'];
 				packages{end+1}=[md.name '.qmu.out'];
Index: /issm/trunk/src/m/classes/clusters/cosmos.m
===================================================================
--- /issm/trunk/src/m/classes/clusters/cosmos.m	(revision 9570)
+++ /issm/trunk/src/m/classes/clusters/cosmos.m	(revision 9571)
@@ -93,5 +93,5 @@
 				%compress the files into one zip.
 				compressstring=['tar -zcf ' md.runtimename '.tar.gz ' md.name '.bin ' md.name '.queue '  md.name '.petsc '];
-				if md.qmu_analysis,
+				if md.dakota_analysis,
 					compressstring=[compressstring md.name '.qmu.in'];
 				end
@@ -123,5 +123,5 @@
 			%What packages are we picking up from remote cluster
 			packages={[md.name '.outlog'],[md.name '.errlog']};
-			if md.qmu_analysis,
+			if md.dakota_analysis,
 				packages{end+1}=[md.name '.qmu.err'];
 				packages{end+1}=[md.name '.qmu.out'];
Index: /issm/trunk/src/m/classes/clusters/gemini.m
===================================================================
--- /issm/trunk/src/m/classes/clusters/gemini.m	(revision 9570)
+++ /issm/trunk/src/m/classes/clusters/gemini.m	(revision 9571)
@@ -94,5 +94,5 @@
 				%compress the files into one zip.
 				compressstring=['tar -zcf ' md.runtimename '.tar.gz ' md.name '.bin ' md.name '.queue '  md.name '.petsc '];
-				if md.qmu_analysis,
+				if md.dakota_analysis,
 					compressstring=[compressstring md.name '.qmu.in'];
 				end
@@ -124,5 +124,5 @@
 			%What packages are we picking up from remote cluster
 			packages={[md.name '.outlog'],[md.name '.errlog']};
-			if md.qmu_analysis,
+			if md.dakota_analysis,
 				packages{end+1}=[md.name '.qmu.err'];
 				packages{end+1}=[md.name '.qmu.out'];
Index: /issm/trunk/src/m/classes/clusters/generic.m
===================================================================
--- /issm/trunk/src/m/classes/clusters/generic.m	(revision 9570)
+++ /issm/trunk/src/m/classes/clusters/generic.m	(revision 9571)
@@ -123,5 +123,5 @@
 				%compress the files into one zip.
 				compressstring=['tar -zcf ' md.runtimename '.tar.gz ' md.name '.bin ' md.name '.queue '  md.name '.petsc '];
-				if md.qmu_analysis,
+				if md.dakota_analysis,
 					compressstring=[compressstring md.name '.qmu.in'];
 				end
@@ -154,5 +154,5 @@
 			%What packages are we picking up from remote cluster
 			packages={[md.name '.outlog'],[md.name '.errlog']};
-			if md.qmu_analysis,
+			if md.dakota_analysis,
 				packages{end+1}=[md.name '.qmu.err'];
 				packages{end+1}=[md.name '.qmu.out'];
Index: /issm/trunk/src/m/classes/clusters/pfe.m
===================================================================
--- /issm/trunk/src/m/classes/clusters/pfe.m	(revision 9570)
+++ /issm/trunk/src/m/classes/clusters/pfe.m	(revision 9571)
@@ -182,5 +182,5 @@
 				%compress the files into one zip.
 				compressstring=['tar -zcf ' md.runtimename '.tar.gz ' md.name '.bin ' md.name '.queue '  md.name '.petsc '];
-				if md.qmu_analysis,
+				if md.dakota_analysis,
 					compressstring=[compressstring md.name '.qmu.in '];
 				end
@@ -234,5 +234,5 @@
 				packages={};
 			end
-			if md.qmu_analysis,
+			if md.dakota_analysis,
 				packages{end+1}=[md.name '.qmu.err'];
 				packages{end+1}=[md.name '.qmu.out'];
Index: /issm/trunk/src/m/classes/clusters/pollux.m
===================================================================
--- /issm/trunk/src/m/classes/clusters/pollux.m	(revision 9570)
+++ /issm/trunk/src/m/classes/clusters/pollux.m	(revision 9571)
@@ -94,5 +94,5 @@
 				%compress the files into one zip.
 				compressstring=['tar -zcf ' md.runtimename '.tar.gz ' md.name '.bin ' md.name '.queue '  md.name '.petsc '];
-				if md.qmu_analysis,
+				if md.dakota_analysis,
 					compressstring=[compressstring md.name '.qmu.in'];
 				end
@@ -124,5 +124,5 @@
 			%What packages are we picking up from remote cluster
 			packages={[md.name '.outlog'],[md.name '.errlog']};
-			if md.qmu_analysis,
+			if md.dakota_analysis,
 				packages{end+1}=[md.name '.qmu.err'];
 				packages{end+1}=[md.name '.qmu.out'];
Index: /issm/trunk/src/m/classes/model/model.m
===================================================================
--- /issm/trunk/src/m/classes/model/model.m	(revision 9570)
+++ /issm/trunk/src/m/classes/model/model.m	(revision 9571)
@@ -247,5 +247,5 @@
 		 dakotaout                       = modelfield('default','','marshall',false);
 		 dakotadat                       = modelfield('default','','marshall',false);
-		 qmu_analysis                    = modelfield('default',0,'marshall',true,'format','Boolean');
+		 dakota_analysis                    = modelfield('default',0,'marshall',true,'format','Boolean');
 		 part                            = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',2);
 		 npart                           = modelfield('default',0,'marshall',true,'format','Integer');
@@ -266,4 +266,9 @@
 		 fm_solution           = modelfield('default','','marshall',false);
 		 fm_quality            = modelfield('default',0,'marshall',false);
+		 
+		 %ad: automatic differentiation
+		 ad_analysis = modelfield('default',false,'marshall',true,'format','Boolean');
+		 ad_forward = modelfield('default',true,'marshall',true,'format','Boolean');
+		 ad_reverse = modelfield('default',false,'marshall',true,'format','Boolean');
 
 		 %grounding line migration: 
@@ -433,4 +438,5 @@
 			 if isfield(structmd,'gridonboundary'), md.nodeonboundary=structmd.gridonboundary; end
 			 if isfield(structmd,'petscoptions'), md.solver=structmd.petscoptions; end
+			 if isfield(structmd,'dakota_analysis'), md.dakota_analysis=structmd.dakota_analysis; end
 
 			 %Field changes
Index: /issm/trunk/src/m/enum/AdAnalysisEnum.m
===================================================================
--- /issm/trunk/src/m/enum/AdAnalysisEnum.m	(revision 9571)
+++ /issm/trunk/src/m/enum/AdAnalysisEnum.m	(revision 9571)
@@ -0,0 +1,11 @@
+function macro=AdAnalysisEnum()
+%ADANALYSISENUM - Enum of AdAnalysis
+%
+%   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=AdAnalysisEnum()
+
+macro=StringToEnum('AdAnalysis');
Index: /issm/trunk/src/m/enum/AdForwardEnum.m
===================================================================
--- /issm/trunk/src/m/enum/AdForwardEnum.m	(revision 9571)
+++ /issm/trunk/src/m/enum/AdForwardEnum.m	(revision 9571)
@@ -0,0 +1,11 @@
+function macro=AdForwardEnum()
+%ADFORWARDENUM - Enum of AdForward
+%
+%   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=AdForwardEnum()
+
+macro=StringToEnum('AdForward');
Index: /issm/trunk/src/m/enum/AdReverseEnum.m
===================================================================
--- /issm/trunk/src/m/enum/AdReverseEnum.m	(revision 9571)
+++ /issm/trunk/src/m/enum/AdReverseEnum.m	(revision 9571)
@@ -0,0 +1,11 @@
+function macro=AdReverseEnum()
+%ADREVERSEENUM - Enum of AdReverse
+%
+%   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=AdReverseEnum()
+
+macro=StringToEnum('AdReverse');
Index: /issm/trunk/src/m/enum/DakotaAnalysisEnum.m
===================================================================
--- /issm/trunk/src/m/enum/DakotaAnalysisEnum.m	(revision 9571)
+++ /issm/trunk/src/m/enum/DakotaAnalysisEnum.m	(revision 9571)
@@ -0,0 +1,11 @@
+function macro=DakotaAnalysisEnum()
+%DAKOTAANALYSISENUM - Enum of DakotaAnalysis
+%
+%   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=DakotaAnalysisEnum()
+
+macro=StringToEnum('DakotaAnalysis');
Index: sm/trunk/src/m/enum/QmuAnalysisEnum.m
===================================================================
--- /issm/trunk/src/m/enum/QmuAnalysisEnum.m	(revision 9570)
+++ 	(revision )
@@ -1,11 +1,0 @@
-function macro=QmuAnalysisEnum()
-%QMUANALYSISENUM - Enum of QmuAnalysis
-%
-%   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=QmuAnalysisEnum()
-
-macro=StringToEnum('QmuAnalysis');
Index: /issm/trunk/src/m/model/display/displayqmu.m
===================================================================
--- /issm/trunk/src/m/model/display/displayqmu.m	(revision 9570)
+++ /issm/trunk/src/m/model/display/displayqmu.m	(revision 9571)
@@ -11,6 +11,6 @@
 disp(sprintf('      ''%s''','qmu using Dakota'));
 
-if ~md.qmu_analysis,
-	disp(sprintf('         %s','no scheduled qmu. activate by doing md.qmu_analysis=1'));
+if ~md.dakota_analysis,
+	disp(sprintf('         %s','no scheduled qmu. activate by doing md.dakota_analysis=1'));
 else
 
Index: /issm/trunk/src/m/model/ismodelselfconsistent.m
===================================================================
--- /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9570)
+++ /issm/trunk/src/m/model/ismodelselfconsistent.m	(revision 9571)
@@ -249,5 +249,5 @@
 %}}}
 %QMU {{{1
-if md.qmu_analysis,
+if md.dakota_analysis,
 	if md.qmu_params.evaluation_concurrency~=1,
 		message(['model not consistent: concurrency should be set to 1 when running dakota in library mode']);
@@ -347,5 +347,5 @@
 %Now check all analyses called for a given solution
 %ANALYSESCHECKS {{{1
-[analyses,numanalyses,solutioncore]=SolutionConfiguration(md.solution_type);
+[analyses,numanalyses]=AnalysisConfiguration(md.solution_type);
 for i=1:numanalyses,
 	checkforanalysis(md,analyses(i));
Index: /issm/trunk/src/m/model/isresultconsistent.m
===================================================================
--- /issm/trunk/src/m/model/isresultconsistent.m	(revision 9570)
+++ /issm/trunk/src/m/model/isresultconsistent.m	(revision 9571)
@@ -21,5 +21,5 @@
 
 %do not check results if qmu analysis
-if md.qmu_analysis,
+if md.dakota_analysis,
 	return
 end
Index: /issm/trunk/src/m/model/loadresultsfromcluster.m
===================================================================
--- /issm/trunk/src/m/model/loadresultsfromcluster.m	(revision 9570)
+++ /issm/trunk/src/m/model/loadresultsfromcluster.m	(revision 9571)
@@ -36,5 +36,5 @@
 
 %erase the log and output files
-if md.qmu_analysis,
+if md.dakota_analysis,
 	delete([['qmu' num2str(feature('GetPid')) '/'] md.name '.outlog']);
 	delete([['qmu' num2str(feature('GetPid')) '/']  md.name '.errlog']);
@@ -49,5 +49,5 @@
 hostname=oshostname();
 if strcmpi(hostname,cluster.name),
-	if md.qmu_analysis,
+	if md.dakota_analysis,
 		delete([['qmu' num2str(feature('GetPid')) '/'] md.name '.bin']);
 		delete([['qmu' num2str(feature('GetPid')) '/'] md.name '.queue']);
Index: /issm/trunk/src/m/model/loadresultsfromdisk.m
===================================================================
--- /issm/trunk/src/m/model/loadresultsfromdisk.m	(revision 9570)
+++ /issm/trunk/src/m/model/loadresultsfromdisk.m	(revision 9571)
@@ -11,5 +11,5 @@
 end
 
-if ~md.qmu_analysis,
+if ~md.dakota_analysis,
 
 	%initialize md.results if not a structure yet
Index: /issm/trunk/src/m/model/solve.m
===================================================================
--- /issm/trunk/src/m/model/solve.m	(revision 9570)
+++ /issm/trunk/src/m/model/solve.m	(revision 9571)
@@ -40,5 +40,5 @@
 %if running qmu analysis, some preprocessing of dakota files using 
 %models fields needs to be carried out. 
-if md.qmu_analysis,
+if md.dakota_analysis,
 	md=preqmu(md,options);
 end
@@ -74,5 +74,5 @@
 
 %post processes qmu results if necessary
-if md.qmu_analysis,
+if md.dakota_analysis,
 	md=postqmu(md);
 	cd ..
Index: /issm/trunk/src/m/model/solveparallel.m
===================================================================
--- /issm/trunk/src/m/model/solveparallel.m	(revision 9570)
+++ /issm/trunk/src/m/model/solveparallel.m	(revision 9571)
@@ -39,5 +39,5 @@
 
 		%post processes qmu results if necessary
-		if md.qmu_analysis,
+		if md.dakota_analysis,
 			if ~strncmpi(options.keep,'y',1)
 				system(['rm -rf qmu' num2str(feature('GetPid'))]);
Index: /issm/trunk/src/m/qmu/examples/lrel_mmf.m
===================================================================
--- /issm/trunk/src/m/qmu/examples/lrel_mmf.m	(revision 9570)
+++ /issm/trunk/src/m/qmu/examples/lrel_mmf.m	(revision 9571)
@@ -68,5 +68,5 @@
 md.qmu_params.fd_gradient_step_size=0.01;
 
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 md.npart=10;
 if isempty(md.adjacency)
Index: /issm/trunk/src/m/qmu/postqmu.m
===================================================================
--- /issm/trunk/src/m/qmu/postqmu.m	(revision 9570)
+++ /issm/trunk/src/m/qmu/postqmu.m	(revision 9571)
@@ -56,5 +56,5 @@
 
 %  move all the individual function evalutations into zip files
-if ~md.qmu_analysis,
+if ~md.dakota_analysis,
 	system('zip -mq params.in.zip params.in.[1-9]*');
 	system('zip -mq results.out.zip results.out.[1-9]*');
Index: /issm/trunk/src/m/solutions/AnalysisConfiguration.m
===================================================================
--- /issm/trunk/src/m/solutions/AnalysisConfiguration.m	(revision 9571)
+++ /issm/trunk/src/m/solutions/AnalysisConfiguration.m	(revision 9571)
@@ -0,0 +1,62 @@
+function [analyses,numanalyses]=AnalysisConfiguration(solutiontype),
+%ANALYSISCONFIGURATION - return type of analyses, number of analyses 
+%
+%   Usage:
+%      [analyses, numanalyses]=AnalysisConfiguration(solutiontype);
+
+
+
+switch solutiontype,
+
+	case DiagnosticSolutionEnum,
+		numanalyses=5;
+		analyses=[DiagnosticHorizAnalysisEnum;DiagnosticVertAnalysisEnum;DiagnosticHutterAnalysisEnum;SurfaceSlopeAnalysisEnum;BedSlopeAnalysisEnum];
+
+	case SteadystateSolutionEnum,
+		numanalyses=7; 
+		analyses=[DiagnosticHorizAnalysisEnum;DiagnosticVertAnalysisEnum;DiagnosticHutterAnalysisEnum;SurfaceSlopeAnalysisEnum;BedSlopeAnalysisEnum;ThermalAnalysisEnum;MeltingAnalysisEnum];
+
+	case ThermalSolutionEnum,
+		numanalyses=2; 
+		analyses=[ThermalAnalysisEnum;MeltingAnalysisEnum];
+
+	case EnthalpySolutionEnum,
+		numanalyses=1; 
+		analyses=[EnthalpyAnalysisEnum];
+
+	case PrognosticSolutionEnum,
+		numanalyses=1; 
+		analyses=[PrognosticAnalysisEnum];
+
+	case BalancethicknessSolutionEnum,
+		numanalyses=1; 
+		analyses=[BalancethicknessAnalysisEnum];
+
+	case SurfaceSlopeSolutionEnum,
+		numanalyses=1; 
+		analyses=[SurfaceSlopeAnalysisEnum];
+
+	case BedSlopeSolutionEnum,
+		numanalyses=1; 
+		analyses=[BedSlopeAnalysisEnum];
+
+	case TransientSolutionEnum,
+		numanalyses=8; 
+		analyses=[DiagnosticHorizAnalysisEnum;DiagnosticVertAnalysisEnum;DiagnosticHutterAnalysisEnum;SurfaceSlopeAnalysisEnum;BedSlopeAnalysisEnum;ThermalAnalysisEnum;MeltingAnalysisEnum;PrognosticAnalysisEnum];
+
+	case FlaimSolutionEnum,
+		numanalyses=1; 
+		analyses=[FlaimAnalysisEnum];
+
+	case GroundinglineMigration2DSolutionEnum,
+		numanalyses=0; 
+		analyses=[];
+
+	case HydrologySolutionEnum,
+		numanalyses=3; 
+		analyses=[BedSlopeAnalysisEnum;SurfaceSlopeAnalysisEnum;HydrologyAnalysisEnum];
+
+	otherwise
+		error('%s%s%s',' solution type: ',EnumToString(solutiontype),' not supported yet!');
+
+end
Index: /issm/trunk/src/m/solutions/CorePointerFromSolutionEnum.m
===================================================================
--- /issm/trunk/src/m/solutions/CorePointerFromSolutionEnum.m	(revision 9570)
+++ /issm/trunk/src/m/solutions/CorePointerFromSolutionEnum.m	(revision 9571)
@@ -1,7 +1,10 @@
-function [solutioncore]=CorePointerFromSolutionEnum(solutiontype),
+function [solutioncore]=CorePointerFromSolutionEnum(parameters,solutiontype),
 %COREPOINTERFROMSOLUTIONENUM - returns solution_core function
 %
 %   Usage:
-%      [solutioncore]=CorePointerFromSolutionEnum(solutiontype);
+%      [solutioncore]=CorePointerFromSolutionEnum(parameters,solutiontype);
+
+control_analysis=parameters.ControlAnalysis;
+dakota_analysis=parameters.DakotaAnalysis;
 
 switch solutiontype,
@@ -22,2 +25,5 @@
 
 end
+
+%if control being run on top of solution, change core
+if(control_analysis)solutioncore='control_core';end
Index: sm/trunk/src/m/solutions/SolutionConfiguration.m
===================================================================
--- /issm/trunk/src/m/solutions/SolutionConfiguration.m	(revision 9570)
+++ 	(revision )
@@ -1,63 +1,0 @@
-function [analyses,numanalyses,solutioncore]=SolutionConfiguration(solutiontype),
-%SOLUTIONCONFIGURATION - return type of analyses, number of analyses and solution_core function
-%
-%   Usage:
-%      [analyses, numanalyses, solutioncore]=SolutionConfiguration(solutiontype);
-
-%get solution_core string
-solutioncore=CorePointerFromSolutionEnum(solutiontype);
-
-switch solutiontype,
-
-	case DiagnosticSolutionEnum,
-		numanalyses=5;
-		analyses=[DiagnosticHorizAnalysisEnum;DiagnosticVertAnalysisEnum;DiagnosticHutterAnalysisEnum;SurfaceSlopeAnalysisEnum;BedSlopeAnalysisEnum];
-
-	case SteadystateSolutionEnum,
-		numanalyses=7; 
-		analyses=[DiagnosticHorizAnalysisEnum;DiagnosticVertAnalysisEnum;DiagnosticHutterAnalysisEnum;SurfaceSlopeAnalysisEnum;BedSlopeAnalysisEnum;ThermalAnalysisEnum;MeltingAnalysisEnum];
-
-	case ThermalSolutionEnum,
-		numanalyses=2; 
-		analyses=[ThermalAnalysisEnum;MeltingAnalysisEnum];
-
-	case EnthalpySolutionEnum,
-		numanalyses=1; 
-		analyses=[EnthalpyAnalysisEnum];
-
-	case PrognosticSolutionEnum,
-		numanalyses=1; 
-		analyses=[PrognosticAnalysisEnum];
-
-	case BalancethicknessSolutionEnum,
-		numanalyses=1; 
-		analyses=[BalancethicknessAnalysisEnum];
-
-	case SurfaceSlopeSolutionEnum,
-		numanalyses=1; 
-		analyses=[SurfaceSlopeAnalysisEnum];
-
-	case BedSlopeSolutionEnum,
-		numanalyses=1; 
-		analyses=[BedSlopeAnalysisEnum];
-
-	case TransientSolutionEnum,
-		numanalyses=8; 
-		analyses=[DiagnosticHorizAnalysisEnum;DiagnosticVertAnalysisEnum;DiagnosticHutterAnalysisEnum;SurfaceSlopeAnalysisEnum;BedSlopeAnalysisEnum;ThermalAnalysisEnum;MeltingAnalysisEnum;PrognosticAnalysisEnum];
-
-	case FlaimSolutionEnum,
-		numanalyses=1; 
-		analyses=[FlaimAnalysisEnum];
-
-	case GroundinglineMigration2DSolutionEnum,
-		numanalyses=0; 
-		analyses=[];
-
-	case HydrologySolutionEnum,
-		numanalyses=3; 
-		analyses=[BedSlopeAnalysisEnum;SurfaceSlopeAnalysisEnum;HydrologyAnalysisEnum];
-
-	otherwise
-		error('%s%s%s',' solution type: ',EnumToString(solutiontype),' not supported yet!');
-
-end
Index: /issm/trunk/src/m/solutions/diagnostic_core.m
===================================================================
--- /issm/trunk/src/m/solutions/diagnostic_core.m	(revision 9570)
+++ /issm/trunk/src/m/solutions/diagnostic_core.m	(revision 9571)
@@ -15,10 +15,10 @@
 	ismacayealpattyn=femmodel.parameters.Ismacayealpattyn;
 	isstokes=femmodel.parameters.Isstokes;
-	qmu_analysis=femmodel.parameters.QmuAnalysis;
+	dakota_analysis=femmodel.parameters.QmuAnalysis;
 	control_analysis=femmodel.parameters.ControlAnalysis;
 	solution_type=femmodel.parameters.SolutionType;
 
 	%for qmu analysis, be sure the velocity input we are starting from  is the one in the parameters: 
-	if qmu_analysis,
+	if dakota_analysis,
 		femmodel.elements=InputDuplicate(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,QmuVxEnum,VxEnum);
 		femmodel.elements=InputDuplicate(femmodel.elements,femmodel.nodes,femmodel.vertices,femmodel.loads,femmodel.materials,femmodel.parameters,QmuVyEnum,VyEnum);
Index: /issm/trunk/src/m/solutions/issm.m
===================================================================
--- /issm/trunk/src/m/solutions/issm.m	(revision 9570)
+++ /issm/trunk/src/m/solutions/issm.m	(revision 9571)
@@ -9,9 +9,12 @@
 	disp('launching solution sequence');
 
-	%out of solution_type, figure out solution core function pointer, and types of analyses needed:
-	[analyses,numanalyses,solutioncore]=SolutionConfiguration(solution_type);
+	%out of solution_type, figure types of analyses needed:
+	[analyses,numanalyses]=AnalysisConfiguration(solution_type);
 
 	%create finite element model
 	femmodel=NewFemModel(md,solution_type,analyses,numanalyses);
+
+	%out of solution_type, figure out solution core function pointer
+	[solutioncore]=CorePointerFromSolutionEnum(femmodel.parameters,solution_type);
 	
 	%process petsc options: 
@@ -19,22 +22,17 @@
 
 	%retrieve parameters
-	qmu_analysis=femmodel.parameters.QmuAnalysis;
-	control_analysis=femmodel.parameters.ControlAnalysis;
-
-	%if control being run on top of solution, change core
-	if(control_analysis)solutioncore='control_core';end
+	dakota_analysis=femmodel.parameters.DakotaAnalysis;
 
 	%compute solution
-	if ~qmu_analysis,
-			
-		issmprintf(VerboseSolution,'%s',['call computational core']);
+
+	issmprintf(VerboseSolution,'%s',['call computational core']);
+	if dakota_analysis,
+		Dakota(femmodel);
+	else
 		eval(['femmodel=' solutioncore '(femmodel);']);
+	end
 
-		issmprintf(VerboseSolution,'%s',['write results'])
-		md.results.(EnumToString(solution_type))=OutputResults(femmodel.elements, femmodel.nodes , femmodel.vertices , femmodel.loads , femmodel.materials, femmodel.parameters, femmodel.results);
-	else
-		%launch dakota driver for diagnostic core solution
-		Qmu(femmodel,femmodel.parameters);
-	end
+	issmprintf(VerboseSolution,'%s',['write results'])
+	md.results.(EnumToString(solution_type))=OutputResults(femmodel.elements, femmodel.nodes , femmodel.vertices , femmodel.loads , femmodel.materials, femmodel.parameters, femmodel.results);
 
 	%stop timing
Index: /issm/trunk/src/mex/Dakota/Dakota.cpp
===================================================================
--- /issm/trunk/src/mex/Dakota/Dakota.cpp	(revision 9570)
+++ /issm/trunk/src/mex/Dakota/Dakota.cpp	(revision 9571)
@@ -31,9 +31,6 @@
 	femmodel=FEMMODEL;
 
-	/*Get parameters out of femmodel, to feed to Dakotax: */
-	FetchMatlabData((DataSet**)&parameters,mxGetField(FEMMODEL,0,"parameters"));
-
 	/*!Generate internal degree of freedom numbers: */
-	Dakotax(femmodel,parameters);
+	Dakotax(femmodel);
 
 	/*end module: */
Index: /issm/trunk/test/NightlyRun/test235.m
===================================================================
--- /issm/trunk/test/NightlyRun/test235.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test235.m	(revision 9571)
@@ -78,5 +78,5 @@
 %imperative! 
 md.eps_rel=10^-10; %tighten for qmu analysese
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 %solve
Index: /issm/trunk/test/NightlyRun/test236.m
===================================================================
--- /issm/trunk/test/NightlyRun/test236.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test236.m	(revision 9571)
@@ -78,5 +78,5 @@
 %imperative! 
 md.eps_rel=10^-10; %tighten for qmu analysese
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 %solve
Index: /issm/trunk/test/NightlyRun/test423.m
===================================================================
--- /issm/trunk/test/NightlyRun/test423.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test423.m	(revision 9571)
@@ -9,5 +9,5 @@
 md=partitioner(md,'package','linear','npart',md.npart);
 md.part=md.part-1;
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 %Dakota options
Index: /issm/trunk/test/NightlyRun/test424.m
===================================================================
--- /issm/trunk/test/NightlyRun/test424.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test424.m	(revision 9571)
@@ -9,5 +9,5 @@
 md=partitioner(md,'package','linear','npart',md.npart);
 md.part=md.part-1;
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 
Index: /issm/trunk/test/NightlyRun/test425.m
===================================================================
--- /issm/trunk/test/NightlyRun/test425.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test425.m	(revision 9571)
@@ -31,5 +31,5 @@
 %imperative!
 md.eps_rel=10^-5; %tighten for qmu analyses
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 %solve
Index: /issm/trunk/test/NightlyRun/test426.m
===================================================================
--- /issm/trunk/test/NightlyRun/test426.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test426.m	(revision 9571)
@@ -31,5 +31,5 @@
 %imperative!
 md.eps_rel=10^-5; %tighten for qmu analyses
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 %solve
Index: /issm/trunk/test/NightlyRun/test427.m
===================================================================
--- /issm/trunk/test/NightlyRun/test427.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test427.m	(revision 9571)
@@ -43,5 +43,5 @@
 md.qmu_params.evaluation_concurrency=1;
 md.qmu_params.interval_type='forward';
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 md.eps_rel=10^-5; %tighten for qmu analyses
 
Index: /issm/trunk/test/NightlyRun/test428.m
===================================================================
--- /issm/trunk/test/NightlyRun/test428.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test428.m	(revision 9571)
@@ -43,5 +43,5 @@
 md.qmu_params.evaluation_concurrency=1;
 md.qmu_params.interval_type='forward';
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 md.eps_rel=10^-5; %tighten for qmu analyses
 
Index: /issm/trunk/test/NightlyRun/test434.m
===================================================================
--- /issm/trunk/test/NightlyRun/test434.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test434.m	(revision 9571)
@@ -45,5 +45,5 @@
 md=partitioner(md,'package','chaco','npart',md.npart,'weighting','on');
 md.part=md.part-1;
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 md.eps_rel=10^-5; %tighten for qmu analyses
Index: /issm/trunk/test/NightlyRun/test439.m
===================================================================
--- /issm/trunk/test/NightlyRun/test439.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test439.m	(revision 9571)
@@ -9,5 +9,5 @@
 md=partitioner(md,'package','chaco','npart',md.npart);
 md.part=md.part-1;
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 %Dakota options
Index: /issm/trunk/test/NightlyRun/test440.m
===================================================================
--- /issm/trunk/test/NightlyRun/test440.m	(revision 9570)
+++ /issm/trunk/test/NightlyRun/test440.m	(revision 9571)
@@ -9,5 +9,5 @@
 md=partitioner(md,'package','chaco','npart',md.npart);
 md.part=md.part-1;
-md.qmu_analysis=1;
+md.dakota_analysis=1;
 
 %Dakota options
