Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 24976)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 24977)
@@ -474,4 +474,8 @@
 	xDelete<IssmDouble>(H_elastic);
 	xDelete<IssmDouble>(H_elastic_local);
+	
+	/*Indicate we have not yet ran the Geometry Core module: */
+	parameters->AddObject(new BoolParam(SealevelriseGeometryDoneEnum,false));
+
 /*}}}*/
 	/*Transitions:{{{ */
Index: /issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 24976)
+++ /issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp	(revision 24977)
@@ -24,4 +24,12 @@
 		if(world_rank!=0){
 			femmodel_init= new FemModel(argc,argv,evaluation_comm);
+
+			/*hack: we don't have any place to put solution modules that fit between the model processor
+			 *and the cores:*/
+			for (int i=0;i<femmodel_init->nummodels;i++){
+				if(femmodel_init->analysis_type_list[i]==SealevelriseAnalysisEnum)sealevelrise_core_geometry(femmodel_init);
+				}
+			}
+
 			femmodel_init->profiler->Start(CORE);
 		}
Index: /issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 24976)
+++ /issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp	(revision 24977)
@@ -42,6 +42,6 @@
 	femmodel->SetCurrentConfiguration(SealevelriseAnalysisEnum);
 
-	/*run geometry core:*/
-	if (solution_type!=TransientSolutionEnum) sealevelrise_core_geometry(femmodel);
+	/*run geometry core: */
+	sealevelrise_core_geometry(femmodel);
 
 	/*Run geodetic:*/
@@ -260,14 +260,22 @@
 	IssmDouble *zz    = NULL;
 	int  horiz;
+	bool geometrydone = false;
+
+		
+	/*retrieve parameters:*/
+	femmodel->parameters->FindParam(&horiz,SealevelriseHorizEnum);
+	femmodel->parameters->FindParam(&geometrydone,SealevelriseGeometryDoneEnum);
+
+	if(geometrydone){
+		if(VerboseSolution()) _printf0_("	  geometrical offsets have already been computed, skipping \n");
+		return; //don't need to run this again.
+	}
 
 	/*Verbose: */
 	if(VerboseSolution()) _printf0_("	  computing geometrical offsets into precomputed Green tables \n");
-	
-	femmodel->parameters->FindParam(&horiz,SealevelriseHorizEnum);
 
 	/*first, recover lat,long and radius vectors from vertices: */
 	VertexCoordinatesx(&latitude,&longitude,&radius,femmodel->vertices,spherical); 
 	if(horiz) VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices); 
-
 
 	/*call the FemModel geometry module: */
@@ -282,4 +290,7 @@
 	xDelete<IssmDouble>(longitude);
 	xDelete<IssmDouble>(radius);
+
+	/*Record the fact that we ran this module already: */
+	femmodel->parameters->SetParam(true,SealevelriseGeometryDoneEnum); 
 
 
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24976)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24977)
@@ -308,4 +308,5 @@
 syn keyword cConstant SealevelriseAngularVelocityEnum
 syn keyword cConstant SealevelriseElasticEnum
+syn keyword cConstant SealevelriseGeometryDoneEnum
 syn keyword cConstant SealevelriseEquatorialMoiEnum
 syn keyword cConstant SealevelriseFluidLoveEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24976)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24977)
@@ -302,4 +302,5 @@
 	SealevelriseAngularVelocityEnum,
 	SealevelriseElasticEnum,
+	SealevelriseGeometryDoneEnum,
 	SealevelriseEquatorialMoiEnum,
 	SealevelriseFluidLoveEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24976)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24977)
@@ -310,4 +310,5 @@
 		case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity";
 		case SealevelriseElasticEnum : return "SealevelriseElastic";
+		case SealevelriseGeometryDoneEnum : return "SealevelriseGeometryDone";
 		case SealevelriseEquatorialMoiEnum : return "SealevelriseEquatorialMoi";
 		case SealevelriseFluidLoveEnum : return "SealevelriseFluidLove";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24976)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24977)
@@ -316,4 +316,5 @@
 	      else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum;
 	      else if (strcmp(name,"SealevelriseElastic")==0) return SealevelriseElasticEnum;
+	      else if (strcmp(name,"SealevelriseGeometryDone")==0) return SealevelriseGeometryDoneEnum;
 	      else if (strcmp(name,"SealevelriseEquatorialMoi")==0) return SealevelriseEquatorialMoiEnum;
 	      else if (strcmp(name,"SealevelriseFluidLove")==0) return SealevelriseFluidLoveEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"SmbK")==0) return SmbKEnum;
 	      else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
-	      else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum;
+	      if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
+	      else if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum;
 	      else if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum;
 	      else if (strcmp(name,"SmbRlaps")==0) return SmbRlapsEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
 	      else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
-	      else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
+	      if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
+	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
 	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
 	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
 	      else if (strcmp(name,"Ice")==0) return IceEnum;
-	      else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"Input")==0) return InputEnum;
+	      if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
+	      else if (strcmp(name,"Input")==0) return InputEnum;
 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
 	      else if (strcmp(name,"InversionSurfaceObs")==0) return InversionSurfaceObsEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;
 	      else if (strcmp(name,"SmbGsp")==0) return SmbGspEnum;
-	      else if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
+	      if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum;
+	      else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum;
 	      else if (strcmp(name,"SmbIsInitialized")==0) return SmbIsInitializedEnum;
 	      else if (strcmp(name,"SmbMAdd")==0) return SmbMAddEnum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
 	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
-	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
+	      if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
 	      else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum;
 	      else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
 	      else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
-	      else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
+	      if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
+	      else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum;
 	      else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum;
 	      else if (strcmp(name,"BasalforcingsIsmip6")==0) return BasalforcingsIsmip6Enum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
 	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
-	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"Hydrologypism")==0) return HydrologypismEnum;
+	      if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
+	      else if (strcmp(name,"Hydrologypism")==0) return HydrologypismEnum;
 	      else if (strcmp(name,"Hydrologyshakti")==0) return HydrologyshaktiEnum;
 	      else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
 	      else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
-	      else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
+	      if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
+	      else if (strcmp(name,"P2xP4")==0) return P2xP4Enum;
 	      else if (strcmp(name,"Paterson")==0) return PatersonEnum;
 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
@@ -1366,9 +1367,9 @@
 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
 	      else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
-	      else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
+	      if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum;
+	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
 	      else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
