Index: /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.cpp	(revision 26075)
+++ /issm/trunk-jpl/src/c/analyses/OceantransportAnalysis.cpp	(revision 26076)
@@ -56,6 +56,6 @@
 
 	/*Initialize sea level cumulated sea level loads :*/
-	InputUpdateFromConstantx(inputs,elements,0.,AccumulatedDeltaBottomPressureEnum);
-	InputUpdateFromConstantx(inputs,elements,0.,OldAccumulatedDeltaBottomPressureEnum);
+	iomodel->ConstantToInput(inputs,elements,0.,AccumulatedDeltaBottomPressureEnum,P1Enum);
+	iomodel->ConstantToInput(inputs,elements,0.,OldAccumulatedDeltaBottomPressureEnum,P1Enum);
 	iomodel->FetchDataToInput(inputs,elements,"md.initialization.bottompressure",BottomPressureEnum);
 
@@ -158,6 +158,4 @@
 	int         i,domaintype;
 	int*        doflist=NULL;
-	int         isgrd=0;
-	int         frequency,count;
 
 	/*Fetch number of nodes and dof for this finite element*/
@@ -198,56 +196,8 @@
 	element->AddInput(StrEnum,&strmean,P0Enum); 
 
-	/*Now, we need to do some "processing"*/
-	IssmDouble* oldbp      = xNew<IssmDouble>(numnodes);
-	IssmDouble* cumdeltabp = xNew<IssmDouble>(numnodes);
-	IssmDouble* oldcumdeltabp = xNew<IssmDouble>(numnodes);
-	IssmDouble* deltabp = xNew<IssmDouble>(numnodes);
-	IssmDouble* olddsl      = xNew<IssmDouble>(numnodes);
-	IssmDouble* deltadsl      = xNew<IssmDouble>(numnodes);
-	IssmDouble  oldstr,deltastr;
-
-	/*Deal with bottom pressure first. First get previous bottom pressure:*/
-	element->GetInputListOnVertices(&oldbp[0],BottomPressureOldEnum);
-	element->FindParam(&isgrd,SolidearthSettingsGRDEnum);
-	if(isgrd)element->GetInputListOnVertices(&cumdeltabp[0],AccumulatedDeltaBottomPressureEnum);
-
-	/*What is the delta bottompressure forcing the sea-level change core: cumulated over time, hence the +=:*/
-	if(isgrd){
-		for(int i=0;i<numnodes;i++){
-			cumdeltabp[i] += bp[i]-oldbp[i];
-		}
-	}
-
-	/*Add input to the element: */
-	if(isgrd){
-		element->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
-		element->FindParam(&count,SealevelchangeRunCountEnum);
-		element->AddInput(AccumulatedDeltaBottomPressureEnum,cumdeltabp,P1Enum);
-		if(count==frequency){
-			element->GetInputListOnVertices(&oldcumdeltabp[0],OldAccumulatedDeltaBottomPressureEnum);
-			element->AddInput(OldAccumulatedDeltaBottomPressureEnum,cumdeltabp,P1Enum);
-			for(int i=0;i<numnodes;i++)deltabp[i]=cumdeltabp[i]-oldcumdeltabp[i];
-			element->AddInput(DeltaBottomPressureEnum,deltabp,P1Enum);
-
-		}
-	}
-
-	/*Deal with dsl and str:*/
-	element->GetInputListOnVertices(&olddsl[0],DslOldEnum);
-	element->GetInputValue(&oldstr,StrOldEnum);
-	for (int i=0;i<numnodes;i++) deltadsl[i]=dsl[i]-olddsl[i];
-	deltastr=strmean-oldstr;
-	element->AddInput(DeltaDslEnum,deltadsl,P1Enum);
-	element->AddInput(DeltaStrEnum,&deltastr,P0Enum);
-
 	/*Free ressources:*/
 	xDelete<IssmDouble>(bp);
-	xDelete<IssmDouble>(deltabp);
-	xDelete<IssmDouble>(cumdeltabp);
-	xDelete<IssmDouble>(oldcumdeltabp);
-	xDelete<IssmDouble>(oldbp);
+	xDelete<IssmDouble>(str);
 	xDelete<IssmDouble>(dsl);
-	xDelete<IssmDouble>(olddsl);
-	xDelete<IssmDouble>(deltadsl);
 	xDelete<IssmDouble>(values);
 	xDelete<int>(doflist);
Index: /issm/trunk-jpl/src/c/cores/oceantransport_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/oceantransport_core.cpp	(revision 26075)
+++ /issm/trunk-jpl/src/c/cores/oceantransport_core.cpp	(revision 26076)
@@ -10,5 +10,6 @@
 #include "../solutionsequences/solutionsequences.h"
 
-void oceantransport_core(FemModel* femmodel){
+void SolidEarthOceanUpdates(FemModel* femmodel);
+void oceantransport_core(FemModel* femmodel){ /*{{{*/
 
 	/*Start profiler*/
@@ -50,3 +51,36 @@
 	/*profiler*/
 	femmodel->profiler->Stop(OCEANTRANSPORTCORE);
-}
+} /*}}}*/
+void SolidEarthOceanUpdates(FemModel* femmodel){ /*{{{*/
+
+	int isgrd;
+	int grdmodel;
+	IssmDouble time;
+	int frequency,count;
+
+	/*retrieve parameters:*/
+	femmodel->parameters->FindParam(&isgrd,SolidearthSettingsGRDEnum);
+	femmodel->parameters->FindParam(&grdmodel,GrdModelEnum);
+	femmodel->parameters->FindParam(&time,TimeEnum);
+	femmodel->parameters->FindParam(&frequency,SolidearthSettingsRunFrequencyEnum);
+	femmodel->parameters->FindParam(&count,SealevelchangeRunCountEnum);
+	
+	/*early return?:*/
+	if(!isgrd)return;
+
+	/* From old and new bottom pressures, create delta bottom pressure, delta dsl and delta str. 
+	 * Accumulate delta bottom pressure: */
+	femmodel->inputs->AXPY(-1, BottomPressureOldEnum,BottomPressureEnum,DeltaBottomPressureEnum);
+	femmodel->inputs->AXPY(+1, DeltaBottomPressureEnum,AccumulatedDeltaBottomPressureEnum,DummyEnum);
+	femmodel->inputs->DuplicateInput(DummyEnum,AccumulatedDeltaBottomPressureEnum);
+
+	femmodel->inputs->AXPY(-1, DslOldEnum,DslEnum,DeltaDslEnum);
+	femmodel->inputs->AXPY(-1, StrOldEnum,StrEnum,DeltaStrEnum);
+
+	/* Compute total bottom pressure change between two sea-level solver time steps, ie. every frequency*dt. */
+	if(count==frequency){
+		femmodel->inputs->AXPY(-1, OldAccumulatedDeltaBottomPressureEnum,AccumulatedDeltaBottomPressureEnum,DeltaBottomPressureEnum);
+		femmodel->inputs->DuplicateInput(AccumulatedDeltaBottomPressureEnum,OldAccumulatedDeltaBottomPressureEnum);
+	}
+	return;
+}/*}}}*/
