Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 27708)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 27709)
@@ -89,4 +89,5 @@
 	./classes/Misfit.cpp \
 	./classes/Cfsurfacesquare.cpp \
+	./classes/Cfsurfacesquaretransient.cpp \
 	./classes/Cfdragcoeffabsgrad.cpp \
 	./classes/Cfrheologybbarabsgrad.cpp \
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacesquaretransient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacesquaretransient.cpp	(revision 27709)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacesquaretransient.cpp	(revision 27709)
@@ -0,0 +1,139 @@
+/*!\file Cfsurfacesquaretransient.cpp
+ * \brief: Cfsurfacesquaretransient Object
+ */
+
+/*Headers:*/
+/*{{{*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./classes.h"
+#include "./ExternalResults/ExternalResult.h"
+#include "./ExternalResults/Results.h"
+#include "../datastructures/datastructures.h"
+#include "./Elements/Element.h"
+#include "./Elements/Elements.h"
+#include "./FemModel.h"
+#include "../modules/SurfaceAreax/SurfaceAreax.h"
+#include "../classes/Params/Parameters.h"
+#include "../classes/gauss/Gauss.h"
+#include "./Inputs/DatasetInput.h"
+/*}}}*/
+
+/*Cfsurfacesquaretransient constructors, destructors :*/
+Cfsurfacesquaretransient::Cfsurfacesquaretransient(){/*{{{*/
+
+	this->definitionenum = -1;
+	this->name           = NULL;
+	this->model_enum     = UNDEF;
+	this->datatimes      = NULL;
+	this->passedflags    = NULL;
+}
+/*}}}*/
+Cfsurfacesquaretransient::Cfsurfacesquaretransient(char* in_name, int in_definitionenum, int in_model_enum, int in_num_datatimes, IssmDouble* in_datatimes, bool* in_passedflags){/*{{{*/
+
+	this->definitionenum=in_definitionenum;
+
+	this->name = xNew<char>(strlen(in_name)+1);
+	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+
+	this->model_enum=in_model_enum;
+	this->num_datatimes = in_num_datatimes;
+
+	/*Allocate arrays*/
+	_assert_(this->num_datatimes>0);
+	this->datatimes   = xNew<IssmDouble>(this->num_datatimes);
+	this->passedflags = xNew<bool>(this->num_datatimes);
+	xMemCpy<IssmDouble>(this->datatimes,in_datatimes,this->num_datatimes);
+	xMemCpy<bool>(this->passedflags,in_passedflags,this->num_datatimes);
+}
+/*}}}*/
+Cfsurfacesquaretransient::Cfsurfacesquaretransient(char* in_name, int in_definitionenum, int in_model_enum, int in_num_datatimes, IssmDouble* in_datatimes){/*{{{*/
+
+	this->definitionenum=in_definitionenum;
+
+	this->name = xNew<char>(strlen(in_name)+1);
+	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+
+	this->model_enum=in_model_enum;
+	this->num_datatimes = in_num_datatimes;
+
+	/*Allocate arrays*/
+	_assert_(this->num_datatimes>0);
+	this->datatimes   = xNew<IssmDouble>(this->num_datatimes);
+	this->passedflags = xNew<bool>(this->num_datatimes);
+	xMemCpy<IssmDouble>(this->datatimes,in_datatimes,this->num_datatimes);
+
+	/*initialize passedtimes to false*/
+	for(int i=0;i<this->num_datatimes;i++) this->passedflags[i]= false;
+}
+/*}}}*/
+Cfsurfacesquaretransient::~Cfsurfacesquaretransient(){/*{{{*/
+	if(this->name) xDelete(this->name);
+	if(this->datatimes) xDelete(this->datatimes);
+	if(this->passedflags) xDelete(this->passedflags);
+}
+/*}}}*/
+
+/*Object virtual function resolutoin: */
+Object* Cfsurfacesquaretransient::copy() {/*{{{*/
+	Cfsurfacesquaretransient* output = new Cfsurfacesquaretransient(this->name,this->definitionenum, this->model_enum, this->num_datatimes, this->datatimes,this->passedflags);
+	return (Object*)output;
+}
+/*}}}*/
+void Cfsurfacesquaretransient::DeepEcho(void){/*{{{*/
+	this->Echo();
+}
+/*}}}*/
+void Cfsurfacesquaretransient::Echo(void){/*{{{*/
+	_printf_(" Cfsurfacesquaretransient: " << name << " " << this->definitionenum << "\n");
+	_printf_("    model_enum: " << model_enum << " " << EnumToStringx(model_enum) << "\n");
+	_error_("not implemented yet");
+}
+/*}}}*/
+int Cfsurfacesquaretransient::Id(void){/*{{{*/
+	return -1;
+}
+/*}}}*/
+void Cfsurfacesquaretransient::Marshall(MarshallHandle* marshallhandle){/*{{{*/
+
+	int object_enum=CfsurfacesquaretransientEnum;
+	marshallhandle->call(object_enum);
+
+	marshallhandle->call(this->definitionenum);
+	marshallhandle->call(this->model_enum);
+	marshallhandle->call(this->name);
+	marshallhandle->call(this->num_datatimes);
+	marshallhandle->call(this->datatimes,this->num_datatimes);
+	marshallhandle->call(this->passedflags,this->num_datatimes);
+} 
+/*}}}*/
+int Cfsurfacesquaretransient::ObjectEnum(void){/*{{{*/
+	return CfsurfacesquaretransientEnum;
+}
+/*}}}*/
+
+/*Definition virtual function resolutoin: */
+int Cfsurfacesquaretransient::DefinitionEnum(){/*{{{*/
+	return this->definitionenum;
+}
+/*}}}*/
+char* Cfsurfacesquaretransient::Name(){/*{{{*/
+	char* name2=xNew<char>(strlen(this->name)+1);
+	xMemCpy(name2,this->name,strlen(this->name)+1);
+
+	return name2;
+}
+/*}}}*/
+IssmDouble Cfsurfacesquaretransient::Response(FemModel* femmodel){/*{{{*/
+	 _error_("Not implemented yet");
+
+}
+/*}}}*/
+IssmDouble Cfsurfacesquaretransient::Cfsurfacesquaretransient_Calculation(Element* element, int model_enum){/*{{{*/
+
+	_error_("not implemented");
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacesquaretransient.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacesquaretransient.h	(revision 27709)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacesquaretransient.h	(revision 27709)
@@ -0,0 +1,45 @@
+/*!\file Cfsurfacesquaretransient.h
+ * \brief: header file for Cfsurfacesquaretransient object
+ */
+
+#ifndef _CFSURFACESQUARETRANSIENT_H_
+#define _CFSURFACESQUARETRANSIENT_H_
+
+/*Headers:*/
+#include "./Definition.h"
+class FemModel;
+
+IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+
+class Cfsurfacesquaretransient: public Object, public Definition{
+
+	public: 
+
+		int         definitionenum;
+		int         model_enum;
+		char       *name;
+		int         num_datatimes;
+		IssmDouble *datatimes;
+		bool       *passedflags;
+
+		/*Cfsurfacesquaretransient constructors, destructors :*/
+		Cfsurfacesquaretransient();
+		Cfsurfacesquaretransient(char* in_name, int in_definitionenum, int in_model_enum,int num_datatimes, IssmDouble* in_datatime);
+		Cfsurfacesquaretransient(char* in_name, int in_definitionenum, int in_model_enum,int num_datatimes, IssmDouble* in_datatime, bool* in_timepassedflag);
+		~Cfsurfacesquaretransient();
+
+		/*Object virtual function resolutoin: */
+		Object *copy();
+		void    DeepEcho(void);
+		void    Echo(void);
+		int     Id(void);
+		void    Marshall(MarshallHandle  *marshallhandle);
+		int     ObjectEnum(void);
+
+		/*Definition virtual function resolutoin: */
+		int         DefinitionEnum();
+		char       *Name();
+		IssmDouble  Response(FemModel *femmodel);
+		IssmDouble  Cfsurfacesquaretransient_Calculation(Element  *element, int model_enum);
+};
+#endif  /* _CFSURFACESQUARE_H_ */
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 27708)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 27709)
@@ -2385,5 +2385,5 @@
 	/*Assign output pointers: */
 	*pstrings=strings;
-	*pnumstrings=num_instances;
+	if(pnumstrings) *pnumstrings=num_instances;
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 27708)
+++ /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 27709)
@@ -154,5 +154,5 @@
 		void        FetchMultipleData(int*** pmatrices,int** pmdims,int** pndims, int* pnumrecords,const char* data_name);
 		void        FetchMultipleData(int** pvector, int* pnum_instances,const char* data_name);
-		void        FetchMultipleData(IssmDouble** pvector, int* pnum_instances,const char* data_name);
+		void        FetchMultipleData(IssmDouble** pvector, int* pM,const char* data_name);
 		fpos_t*     SetFilePointersToData(int** pcodes,int** pvector_types, int* pnum_instances, const char* data_name);
 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, const char* data_name);
Index: /issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/classes.h	(revision 27708)
+++ /issm/trunk-jpl/src/c/classes/classes.h	(revision 27709)
@@ -24,4 +24,5 @@
 #include "./Numberedcostfunction.h"
 #include "./Cfsurfacesquare.h"
+#include "./Cfsurfacesquaretransient.h"
 #include "./Cfdragcoeffabsgrad.h"
 #include "./Cfrheologybbarabsgrad.h"
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 27708)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 27709)
@@ -244,4 +244,83 @@
 				/*}}}*/
 			}
+			else if (output_definition_enums[i]==CfsurfacesquaretransientEnum){
+				/*Deal with cfsurfacesquaretransient: {{{*/
+
+				/*cfsurfacesquaretransient variables: */
+				int          num_cfsurfacesquaretransients,test;
+				char       **cfssqt_name_s                = NULL;
+				char       **cfssqt_definitionstring_s    = NULL;
+				char       **cfssqt_model_string_s        = NULL;
+				IssmDouble **cfssqt_observations_s        = NULL;
+				char       **cfssqt_observations_string_s = NULL;
+				int         *cfssqt_observations_M_s      = NULL;
+				int         *cfssqt_observations_N_s      = NULL;
+				IssmDouble **cfssqt_weights_s             = NULL;
+				int         *cfssqt_weights_M_s           = NULL;
+				int         *cfssqt_weights_N_s           = NULL;
+				char       **cfssqt_weights_string_s      = NULL;
+				IssmDouble **cfssqt_datatimes_s           = NULL;
+            int         *cfssqt_datatimes_M_s         = NULL;
+            int         *cfssqt_datatimes_N_s         = NULL;
+
+				/*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfsurfacesquaretransient.m): */
+				iomodel->FetchMultipleData(&cfssqt_name_s,&num_cfsurfacesquaretransients,"md.cfsurfacesquaretransient.name");
+				iomodel->FetchMultipleData(&cfssqt_definitionstring_s,&test,"md.cfsurfacesquaretransient.definitionstring"); _assert_(test==num_cfsurfacesquaretransients);
+				iomodel->FetchMultipleData(&cfssqt_model_string_s,&test,"md.cfsurfacesquaretransient.model_string"); _assert_(test==num_cfsurfacesquaretransients);
+				iomodel->FetchMultipleData(&cfssqt_observations_s,&cfssqt_observations_M_s,&cfssqt_observations_N_s,NULL, "md.cfsurfacesquaretransient.observations");
+				iomodel->FetchMultipleData(&cfssqt_observations_string_s, NULL,"md.cfsurfacesquaretransient.observation_string");
+				iomodel->FetchMultipleData(&cfssqt_weights_s,&cfssqt_weights_M_s,&cfssqt_weights_N_s,NULL,"md.cfsurfacesquaretransient.weights");
+				iomodel->FetchMultipleData(&cfssqt_weights_string_s,NULL,"md.cfsurfacesquaretransient.weights_string");
+				iomodel->FetchMultipleData(&cfssqt_datatimes_s,&cfssqt_datatimes_M_s,&cfssqt_datatimes_N_s,NULL,"md.cfsurfacesquaretransient.datatimes"); 
+
+				for(j=0;j<num_cfsurfacesquaretransients;j++){
+
+               /*Check that we can use P1 inputs*/
+					if (cfssqt_observations_M_s[j]==iomodel->numberofvertices) _error_("only P1 fields are allowed for now");
+               if (cfssqt_observations_M_s[j]==cfssqt_weights_M_s[j]) _error_("observations and weights do not have the same number of rows");
+               if (cfssqt_observations_N_s[j]==cfssqt_weights_N_s[j]) _error_("observations and weights do not have the same number of columns");
+               if (cfssqt_datatimes_M_s[j]==1) _error_("datatime should have only one row");
+               if (cfssqt_datatimes_N_s[j]==cfssqt_weights_N_s[j]) _error_("datatime should have the same number of columns as the observations");
+
+					/*First create a cfsurfacesquaretransient object for that specific string (cfssqt_model_string_s[j]):*/
+					output_definitions->AddObject(new Cfsurfacesquaretransient(cfssqt_name_s[j], StringToEnumx(cfssqt_definitionstring_s[j]), StringToEnumx(cfssqt_model_string_s[j]), cfssqt_datatimes_N_s[j], cfssqt_datatimes_s[j]));
+
+					/*Now, for this particular cfsurfacesquaretransient object, make sure we plug into the elements: the observation, and the weights.*/
+					for(Object* & object : elements->objects){
+						Element* element=xDynamicCast<Element*>(object);
+						_error_("need to implement transient inputs?");
+						//element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_observations_s[j],inputs,iomodel,cfssqt_observations_M_s[j],cfssqt_observations_N_s[j],obs_vector_type,StringToEnumx(cfssqt_observations_string_s[j]),7,SurfaceObservationEnum);
+						//element->DatasetInputAdd(StringToEnumx(cfssqt_definitionstring_s[j]),cfssqt_weights_s[j],inputs,iomodel,cfssqt_weights_M_s[j],cfssqt_weights_N_s[j],weight_vector_type,StringToEnumx(cfssqt_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
+
+					}
+
+				}
+
+				/*Free resources:*/
+				for(j=0;j<num_cfsurfacesquaretransients;j++){
+					char* string=NULL;
+					IssmDouble* matrix = NULL;
+					string = cfssqt_definitionstring_s[j];		xDelete<char>(string);
+					string = cfssqt_observations_string_s[j];	xDelete<char>(string);
+					string = cfssqt_model_string_s[j];			xDelete<char>(string);
+					string = cfssqt_weights_string_s[j];		xDelete<char>(string);
+					string = cfssqt_name_s[j];    xDelete<char>(string);
+					matrix = cfssqt_observations_s[j]; xDelete<IssmDouble>(matrix);
+					matrix = cfssqt_weights_s[j]; xDelete<IssmDouble>(matrix);
+				}
+				xDelete<char*>(cfssqt_name_s);
+				xDelete<char*>(cfssqt_model_string_s);
+				xDelete<char*>(cfssqt_definitionstring_s);
+				xDelete<IssmDouble*>(cfssqt_observations_s);
+				xDelete<char*>(cfssqt_observations_string_s);
+				xDelete<int>(cfssqt_observations_M_s);
+				xDelete<int>(cfssqt_observations_N_s);
+				xDelete<IssmDouble*>(cfssqt_weights_s);
+				xDelete<int>(cfssqt_weights_M_s);
+				xDelete<int>(cfssqt_weights_N_s);
+				xDelete<char*>(cfssqt_weights_string_s);
+				xDelete<IssmDouble>(cfssqt_datatimes_s);
+				/*}}}*/
+			}
 			else if (output_definition_enums[i]==CfdragcoeffabsgradEnum){
 				/*Deal with cfdragcoeffabsgrad: {{{*/
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27708)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27709)
@@ -1396,4 +1396,5 @@
 syn keyword cConstant CfsurfacelogvelEnum
 syn keyword cConstant CfsurfacesquareEnum
+syn keyword cConstant CfsurfacesquaretransientEnum
 syn keyword cConstant CflevelsetmisfitEnum
 syn keyword cConstant ChannelEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27708)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27709)
@@ -1395,4 +1395,5 @@
 	CfsurfacelogvelEnum,
 	CfsurfacesquareEnum,
+	CfsurfacesquaretransientEnum,
 	CflevelsetmisfitEnum,
 	ChannelEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27708)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27709)
@@ -1398,4 +1398,5 @@
 		case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
 		case CfsurfacesquareEnum : return "Cfsurfacesquare";
+		case CfsurfacesquaretransientEnum : return "Cfsurfacesquaretransient";
 		case CflevelsetmisfitEnum : return "Cflevelsetmisfit";
 		case ChannelEnum : return "Channel";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27708)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27709)
@@ -1389,4 +1389,5 @@
 syn keyword juliaConstC CfsurfacelogvelEnum
 syn keyword juliaConstC CfsurfacesquareEnum
+syn keyword juliaConstC CfsurfacesquaretransientEnum
 syn keyword juliaConstC CflevelsetmisfitEnum
 syn keyword juliaConstC ChannelEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27708)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27709)
@@ -1431,4 +1431,5 @@
 	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
 	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
+	      else if (strcmp(name,"Cfsurfacesquaretransient")==0) return CfsurfacesquaretransientEnum;
 	      else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum;
 	      else if (strcmp(name,"Channel")==0) return ChannelEnum;
@@ -1489,9 +1490,9 @@
 	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
 	      else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
-	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
          else stage=13;
    }
    if(stage==13){
-	      if (strcmp(name,"FemModel")==0) return FemModelEnum;
+	      if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
+	      else if (strcmp(name,"FemModel")==0) return FemModelEnum;
 	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
 	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
@@ -1612,9 +1613,9 @@
 	      else if (strcmp(name,"Mathydro")==0) return MathydroEnum;
 	      else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
-	      else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
          else stage=14;
    }
    if(stage==14){
-	      if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
+	      if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
+	      else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
 	      else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
 	      else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
@@ -1735,9 +1736,9 @@
 	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
-	      else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
          else stage=15;
    }
    if(stage==15){
-	      if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
+	      if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
+	      else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
 	      else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
 	      else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
