Index: /issm/branches/trunk-larour-SLPS2022/src/c/analyses/OceantransportAnalysis.cpp
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/analyses/OceantransportAnalysis.cpp	(revision 27257)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/analyses/OceantransportAnalysis.cpp	(revision 27258)
@@ -4,4 +4,6 @@
 #include "../classes/classes.h"
 #include "../classes/Inputs/TransientInput.h"
+#include "../classes/Inputs/TriaInput.h"
+#include "../classes/gauss/Gauss.h"
 #include "../shared/shared.h"
 #include "../modules/modules.h"
@@ -101,39 +103,7 @@
 void           OceantransportAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
 
-	/*retrieve bottom pressure, dsl and str from the spcs in our element:*/
+	/*do nothing:*/
+	return;
 
-	IssmDouble bp,dsl,str;
-	int       *doflist = NULL;
-
-	/*Fetch number of nodes and initialize values*/
-	int         numnodes = element->GetNumberOfNodes();
-	int         numdof   = numnodes*3;
-	IssmDouble* values   = xNew<IssmDouble>(numdof);
-
-	/*Get dof list and inputs */
-	element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
-	Input* bp_input=element->GetInput(OceantransportSpcbottompressureEnum); _assert_(bp_input);
-	Input* dsl_input=element->GetInput(OceantransportSpcdslEnum); _assert_(dsl_input);
-	Input* str_input=element->GetInput(OceantransportSpcstrEnum); _assert_(str_input);
-
-	/*Ok, we have the velocities in inputs, fill in solution */
-	Gauss* gauss=element->NewGauss();
-	for(int i=0;i<numnodes;i++){
-		gauss->GaussVertex(i);
-		bp_input->GetInputValue(&bp,gauss);
-		dsl_input->GetInputValue(&dsl,gauss);
-		str_input->GetInputValue(&str,gauss);
-		values[i*3+0]=bp;
-		values[i*3+1]=dsl;
-		values[i*3+2]=str;
-	}
-
-	/*Add value to global vector*/
-	solution->SetValues(numdof,doflist,values,INS_VAL);
-
-	/*Free ressources:*/
-	delete gauss;
-	xDelete<int>(doflist);
-	xDelete<IssmDouble>(values);
 }/*}}}*/
 void           OceantransportAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element*  element,int control_type,int control_interp,int control_index){/*{{{*/
@@ -142,50 +112,30 @@
 void           OceantransportAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
 
-	int         i,domaintype;
-	int*        doflist=NULL;
+	/*Fetch number of nodes and dof for this finite element*/
+	IssmDouble time;
+	IssmDouble bp[3];
+	IssmDouble dsl[3];
+	IssmDouble str;
+	int numnodes = element->GetNumberOfNodes();
+	
+	element->parameters->FindParam(&time,TimeEnum);
 
-	/*Fetch number of nodes and dof for this finite element*/
-	int numnodes = element->GetNumberOfNodes();
-	int numdof   = numnodes*3;
+	TriaInput* str_input=xDynamicCast<TriaInput*>(element->GetInput(OceantransportSpcstrEnum,time)); _assert_(str_input);
+	TriaInput* bp_input=xDynamicCast<TriaInput*>(element->GetInput(OceantransportSpcbottompressureEnum,time)); _assert_(bp_input);
+	TriaInput* dsl_input=xDynamicCast<TriaInput*>(element->GetInput(OceantransportSpcdslEnum,time)); _assert_(dsl_input);
 
-	/*Fetch dof list and allocate solution vectors*/
-	element->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum);
-	IssmDouble* values    = xNew<IssmDouble>(numdof);
-	IssmDouble* bp        = xNew<IssmDouble>(numnodes);
-	IssmDouble* dsl        = xNew<IssmDouble>(numnodes);
-	IssmDouble* str        = xNew<IssmDouble>(numnodes);
-	IssmDouble  strmean;
+	Gauss* gauss=element->NewGauss();
+	for(int iv=0;iv<3;iv++){
+		gauss->GaussVertex(iv);
+		bp_input->GetInputValue(&bp[iv],gauss);
+		dsl_input->GetInputValue(&dsl[iv],gauss);
+	}
+	str_input->GetInputAverage(&str);
+	delete gauss;
 
-	/*Use the dof list to index into the solution vector: */
-	for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
-
-	/*Retrieve bp,dsl and str:*/
-	strmean=0;
-	for(i=0;i<numnodes;i++){
-		bp[i]=values[i*3+0];
-		dsl[i]=values[i*3+1];
-		str[i]=values[i*3+2];
-		strmean+=str[i]/numnodes;
-
-		/*Check solution*/
-		if(xIsNan<IssmDouble>(bp[i])) _error_("NaN found in bottom pressure solution vector");
-		if(xIsInf<IssmDouble>(bp[i])) _error_("Inf found in bottom pressure  solution vector");
-		if(xIsNan<IssmDouble>(dsl[i])) _error_("NaN found in dsl solution vector");
-		if(xIsInf<IssmDouble>(dsl[i])) _error_("Inf found in dsl solution vector");
-		if(xIsNan<IssmDouble>(str[i])) _error_("NaN found in str solution vector");
-		if(xIsInf<IssmDouble>(str[i])) _error_("Inf found in str solution vector");
-	}
-
-	/*Add bp, dsl and str as inputs to the tria element: */
+	/*Add str bp and dsl levelsets as inputs to the tria element: */
 	element->AddInput(BottomPressureEnum,bp,P1Enum);
 	element->AddInput(DslEnum,dsl,P1Enum);
-	element->AddInput(StrEnum,&strmean,P0Enum); 
-
-	/*Free ressources:*/
-	xDelete<IssmDouble>(bp);
-	xDelete<IssmDouble>(str);
-	xDelete<IssmDouble>(dsl);
-	xDelete<IssmDouble>(values);
-	xDelete<int>(doflist);
+	element->AddInput(StrEnum,&str,P0Enum); 
 
 }/*}}}*/
