Index: /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp	(revision 27060)
+++ /issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp	(revision 27061)
@@ -264,4 +264,7 @@
 
 			parameters->AddObject(new DoubleParam(SolidearthSettingsTimeAccEnum,timeacc));
+			parameters->AddObject(new DoubleMatParam(LoadLoveHEnum,love_h,ndeg,precomputednt));
+			parameters->AddObject(new DoubleMatParam(LoadLoveKEnum,love_k,ndeg,precomputednt));
+			parameters->AddObject(new DoubleMatParam(LoadLoveLEnum,love_l,ndeg,precomputednt));
 
 			if (rotation){
@@ -271,4 +274,10 @@
 				iomodel->FetchData(&love_pmtf_colinear,&dummy,&precomputednt,"md.solidearth.lovenumbers.pmtf_colinear");
 				iomodel->FetchData(&love_pmtf_ortho,&dummy,&precomputednt,"md.solidearth.lovenumbers.pmtf_ortho");
+
+				parameters->AddObject(new DoubleMatParam(LovePolarMotionTransferFunctionColinearEnum,love_pmtf_colinear,1,precomputednt));
+				parameters->AddObject(new DoubleMatParam(LovePolarMotionTransferFunctionOrthogonalEnum,love_pmtf_ortho,1,precomputednt));
+				parameters->AddObject(new DoubleMatParam(TidalLoveHEnum,love_th,ndeg,precomputednt));
+				parameters->AddObject(new DoubleMatParam(TidalLoveKEnum,love_tk,ndeg,precomputednt));
+				parameters->AddObject(new DoubleMatParam(TidalLoveLEnum,love_tl,ndeg,precomputednt));
 			}
 
@@ -586,22 +595,13 @@
 				xDelete<IssmDouble>(G_viscoelastic);
 				xDelete<IssmDouble>(G_viscoelastic_local);
-				xDelete<IssmDouble>(G_viscoelastic_interpolated);
 				xDelete<IssmDouble>(U_viscoelastic);
 				xDelete<IssmDouble>(U_viscoelastic_local);
-				xDelete<IssmDouble>(U_viscoelastic_interpolated);
 				if(horiz){
 					xDelete<IssmDouble>(H_viscoelastic);
 					xDelete<IssmDouble>(H_viscoelastic_local);
-					xDelete<IssmDouble>(H_viscoelastic_interpolated);
 				}
 				if(rotation){
-					xDelete<IssmDouble>(Love_th2_interpolated);
-					xDelete<IssmDouble>(Love_tk2_interpolated);
-					if (horiz) xDelete<IssmDouble>(Love_tl2_interpolated);
 					xDelete<IssmDouble>(love_pmtf_colinear);
 					xDelete<IssmDouble>(love_pmtf_ortho);
-					xDelete<IssmDouble>(Pmtf_col_interpolated);
-					xDelete<IssmDouble>(Pmtf_ortho_interpolated);
-					xDelete<IssmDouble>(Pmtf_z_interpolated);
 
 				}
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 27060)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 27061)
@@ -6398,5 +6398,4 @@
 	IssmDouble* LoveRothoriz = NULL;
 	IssmDouble*  Grot        = NULL;
-
 	IssmDouble* GUrot        = NULL;
 	IssmDouble* GNrot        = NULL;
@@ -6584,8 +6583,7 @@
 		LoveRotRSL  = xNewZeroInit<IssmDouble>(nt);
 		LoveRotU    = xNewZeroInit<IssmDouble>(nt);
-		if (horiz) LoveRothoriz= xNewZeroInit<IssmDouble>(nt);
+		LoveRothoriz= xNewZeroInit<IssmDouble>(nt);
 		Grot        = xNewZeroInit<IssmDouble>(3*3*nt); //3 polar motion components * 3 vertices * number of time steps
 		GUrot       = xNewZeroInit<IssmDouble>(3*3*nt);
-
 
 		if (horiz){
@@ -6681,5 +6679,4 @@
 		this->inputs->SetArrayInput(SealevelchangeViscousUEnum,this->lid,viscousU,3*nt);
 		this->parameters->SetParam(0,SealevelchangeViscousIndexEnum);
-
 		if(horiz){
 			viscousN=xNewZeroInit<IssmDouble>(3*nt);
@@ -6694,73 +6691,34 @@
 	#ifdef _HAVE_RESTRICT_
 	delete G;
-	delete G_gravi_precomputed;
 	if(computeelastic){
 		delete GU;
-		delete G_viscoelastic_precomputed;
-		delete U_viscoelastic_precomputed;
 		if(horiz){
 			delete GN;
 			delete GE;
-			delete H_viscoelastic_precomputed;
 		}
 		if(computerotation){
 			delete Grot;
 			delete GUrot;
-			delete tide_love_h;
-			delete tide_love_k;
-			delete LoveRotRSL;
-			delete LoveRotU;
 			if (horiz){
 				delete GNrot;
 				delete GErot;
-				delete tide_love_l;
-				delete LoveRothoriz;
-			}
-		}
-	}
-	if(computeviscous){
-		delete viscousRSL;
-		delete viscousU;
-
-		if(horiz){
-			delete viscousN;
-			delete viscousE;
+			}
 		}
 	}
 	#else
 	xDelete(G);
-	xDelete(G_gravi_precomputed);
 	if(computeelastic){
 		xDelete(GU);
-		xDelete(G_viscoelastic_precomputed);
-		xDelete(U_viscoelastic_precomputed);
 		if(horiz){
 			xDelete(GN);
 			xDelete(GE);
-			xDelete(H_viscoelastic_precomputed);
 		}
 		if(computerotation){
 			xDelete(Grot);
 			xDelete(GUrot);
-			xDelete(tide_love_h);
-			xDelete(tide_love_k);
-			xDelete(LoveRotRSL);
-			xDelete(LoveRotU);
 			if (horiz){
 				xDelete(GNrot);
 				xDelete(GErot);
-				xDelete(tide_love_l);
-				xDelete(LoveRothoriz);
-			}
-		}
-		
-	}
-	if(computeviscous){
-		xDelete(viscousRSL);
-		xDelete(viscousU);
-
-		if(horiz){
-			xDelete(viscousN);
-			xDelete(viscousE);
+			}
 		}
 	}
@@ -7304,11 +7262,7 @@
 	}
 	xDelete<IssmDouble*>(Gsubel);
-	xDelete<IssmDouble>(G_gravi_precomputed);
 	if(computeelastic){
 		xDelete<IssmDouble*>(GUsubel);
-		xDelete<IssmDouble>(G_viscoelastic_precomputed);
-		xDelete<IssmDouble>(U_viscoelastic_precomputed);
 		if(horiz){
-			xDelete<IssmDouble>(H_viscoelastic_precomputed);
 			xDelete<IssmDouble*>(GNsubel); 
 			xDelete<IssmDouble*>(GEsubel);
@@ -7324,5 +7278,4 @@
 	/*Inputs:*/
 	IssmDouble* viscousRSL=NULL;
-	IssmDouble* viscousSG=NULL;
 	IssmDouble* viscousU=NULL;
 	IssmDouble* viscousN=NULL;
@@ -7357,10 +7310,4 @@
 	}
 
-	/*Free ressources*/
-	xDelete<IssmDouble>(viscousRSL);
-	xDelete<IssmDouble>(viscousU);
-	xDelete<IssmDouble>(viscousN);
-	xDelete<IssmDouble>(viscousE);
-
 }
 /*}}}*/
@@ -7446,6 +7393,4 @@
 	barycontrib->Set(this->Sid(),bslcice,bslchydro,bslcbp);
 
-	xDelete<IssmDouble>(areae);
-
 }
 /*}}}*/
@@ -7455,5 +7400,5 @@
 	IssmDouble* G=NULL;
 	IssmDouble* Grot=NULL;
-	IssmDouble** Gsub=NULL;
+	IssmDouble* Gsub[SLGEOM_NUMLOADS];
 	bool computefuture=false;
 
@@ -7465,5 +7410,4 @@
 	int  nel,nbar;
 
-	Gsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);
 
 	this->parameters->FindParam(&sal,SolidearthSettingsSelfAttractionEnum);
@@ -7481,8 +7425,4 @@
 		this->SealevelchangeGxL(sealevelpercpu, G, Gsub, Grot, loads, polarmotionvector, slgeom, nel,percpu=true,SealevelchangeViscousRSLEnum,computefuture=false);
 	}
-
-	xDelete<IssmDouble>(G);
-	xDelete<IssmDouble>(Grot);
-	xDelete<IssmDouble*>(Gsub);
 
 	return;
@@ -7538,12 +7478,11 @@
 	IssmDouble* GN=NULL;
 	IssmDouble* Grot=NULL;
-	IssmDouble* GSGrot=NULL;
 	IssmDouble* GUrot=NULL;
 	IssmDouble* GNrot=NULL;
 	IssmDouble* GErot=NULL;
-	IssmDouble** Gsub;
-	IssmDouble** GUsub;
-	IssmDouble** GNsub;
-	IssmDouble** GEsub;
+	IssmDouble* Gsub[SLGEOM_NUMLOADS];
+	IssmDouble* GUsub[SLGEOM_NUMLOADS];
+	IssmDouble* GNsub[SLGEOM_NUMLOADS];
+	IssmDouble* GEsub[SLGEOM_NUMLOADS];
 	bool computefuture=false;
 
@@ -7555,9 +7494,4 @@
 	bool percpu=false;
 	bool planethasocean=false;
-
-	Gsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);
-	GUsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);
-	GEsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);
-	GNsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);
 
 	this->parameters->FindParam(&nel,MeshNumberofelementsEnum);
@@ -7620,7 +7554,5 @@
 
 	/*Create geoid: */
-	for(int i=0;i<NUMVERTICES;i++){
-		SealevelGrd[i]=UGrd[i]+RSLGrd[i];
-	}
+	for(int i=0;i<NUMVERTICES;i++)SealevelGrd[i]=UGrd[i]+RSLGrd[i];
 
 	/*Create inputs*/
@@ -7631,20 +7563,4 @@
 		this->AddInput(BedEastGRDEnum,EGrd,P1Enum);
 	}
-
-	/*Free ressources*/
-
-	xDelete<IssmDouble>(G);
-	xDelete<IssmDouble>(GU);
-	xDelete<IssmDouble>(GE);
-	xDelete<IssmDouble>(GN);
-	xDelete<IssmDouble>(Grot);
-	xDelete<IssmDouble>(GSGrot);
-	xDelete<IssmDouble>(GUrot);
-	xDelete<IssmDouble>(GNrot);
-	xDelete<IssmDouble>(GErot);
-	xDelete<IssmDouble*>(Gsub);
-	xDelete<IssmDouble*>(GUsub);
-	xDelete<IssmDouble*>(GEsub);
-	xDelete<IssmDouble*>(GNsub);
 
 } /*}}}*/
@@ -7661,10 +7577,4 @@
 	int viscousindex=0; //important
 	int viscousnumsteps=1; //important
-
-	IssmDouble* grdfieldinterp=NULL;
-	IssmDouble* viscoustimes=NULL;
-	IssmDouble  final_time;
-	IssmDouble  lincoeff;
-	IssmDouble  timeacc;
 
 	this->parameters->FindParam(&computeviscous,SolidearthSettingsViscousEnum);
@@ -7751,4 +7661,10 @@
 		// 3*: subtract from viscous stack the grdfield that has already been accounted for so we don't add it again at the next time step
 
+		IssmDouble* grdfieldinterp=NULL;
+		IssmDouble* viscoustimes=NULL;
+		IssmDouble  final_time;
+		IssmDouble  lincoeff;
+		IssmDouble  timeacc;
+
 		this->parameters->FindParam(&viscoustimes,NULL,SealevelchangeViscousTimesEnum);
 		this->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum);
@@ -7794,4 +7710,6 @@
 		}
 
+		/*Free allocatoins:*/
+		xDelete<IssmDouble>(viscoustimes);
 	} 
 	/*}}}*/
@@ -7809,15 +7727,4 @@
 	}
 
-
-	/*Free allocatoins:*/
-	xDelete<IssmDouble>(grdfield);
-	if (computeviscous){
-		xDelete<IssmDouble>(viscoustimes);
-		xDelete<IssmDouble>(viscousfield);
-		if(computefuture){
-			xDelete<IssmDouble>(grdfieldinterp);
-		}
-	}
-
 } /*}}}*/
 
@@ -7833,5 +7740,4 @@
 
 } /*}}}*/
-
 #endif
 
Index: /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 27060)
+++ /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 27061)
@@ -340,6 +340,4 @@
 		}
 
-		cout << "DEBUG: Sealevelchange convolution cleared\n";
-
 		/*retrieve sea level average  and ocean area:*/
 		for(Object* & object : femmodel->elements->objects){
@@ -347,6 +345,4 @@
 			element->SealevelchangeOceanAverage(loads, oceanareas, subelementoceanareas, sealevelpercpu, slgeom);
 		}
-
-		cout << "DEBUG: Sealevelchange Oceanavaverage cleared\n";
 
 		loads->AssembleSealevelLoads();
@@ -364,6 +360,4 @@
 		ConserveOceanMass(femmodel,loads,barycontrib->Total()/totaloceanarea - oceanaverage,slgeom);
 
-		cout << "DEBUG: Sealevelchange Conserve ocean mass cleared\n";
-
 		//broadcast sea level loads 
 		loads->BroadcastSealevelLoads();
@@ -372,5 +366,4 @@
 		if(slcconvergence(loads->vsealevelloads,oldsealevelloads,eps_rel,eps_abs))break;
 
-		cout << "DEBUG: Sealevelchange convergence cleared\n";
 		//early return?
 		if(iterations>=max_nonlinear_iterations)break;
@@ -437,10 +430,4 @@
 	}
 
-	/*Free ressources*/
-	delete loads;
-	delete oldsealevelloads;
-	delete oceanareas;
-	delete subelementoceanareas;
-
 }
 /*}}}*/
@@ -620,9 +607,4 @@
 	#endif
 
-	xDelete<IssmDouble>(xxe);
-	xDelete<IssmDouble>(yye);
-	xDelete<IssmDouble>(zze);
-	xDelete<IssmDouble>(areae);
-
 	return;
 
@@ -690,9 +672,4 @@
 	femmodel->parameters->AddObject(new DoubleVecParam(ZzeEnum,zze,nel));
 	femmodel->parameters->AddObject(new DoubleVecParam(AreaeEnum,areae,nel));
-
-	xDelete<IssmDouble>(xxe);
-	xDelete<IssmDouble>(yye);
-	xDelete<IssmDouble>(zze);
-	xDelete<IssmDouble>(areae);
 
 	return slgeom;
@@ -887,11 +864,5 @@
 	xDelete<IssmDouble>(m2);
 	xDelete<IssmDouble>(m3);
-
-	xDelete<IssmDouble>(pmtf_col);
-	xDelete<IssmDouble>(pmtf_ortho);
-	xDelete<IssmDouble>(pmtf_z);
 	if (viscous){
-		xDelete<IssmDouble>(viscoustimes);
-																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																			xDelete<IssmDouble>(viscouspolarmotion);
 		if (computefuture){
 			xDelete<IssmDouble>(m1interp);
@@ -964,9 +935,8 @@
 		/*free allocations:*/
 		xDelete<IssmDouble>(viscoustimes);
-		if (rotation) xDelete<IssmDouble>(viscouspolarmotion);
-	}
-
-
-} /*}}}*/
+	}
+
+
+}
 void        ConserveOceanMass(FemModel* femmodel,GrdLoads* loads, IssmDouble offset, SealevelGeometry* slgeom){ /*{{{*/
 
@@ -1004,5 +974,4 @@
 	loadcopy=vloadcopy->ToMPISerial();
 
-	delete vloadcopy;
 	return loadcopy;
 
