Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 23131)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 23132)
@@ -251,4 +251,5 @@
 					./solutionsequences/solutionsequence_newton.cpp\
 					./solutionsequences/solutionsequence_fct.cpp\
+					./solutionsequences/solutionsequence_schurcg.cpp\
 					./solutionsequences/convergence.cpp\
 					./classes/Options/Options.cpp\
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 23131)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 23132)
@@ -5449,4 +5449,26 @@
 }/*}}}*/
 
+/*Schur*/
+void StressbalanceAnalysis::SchurF(Vector<IssmDouble>** pF,FemModel* femmodel){
+
+	/*Initialize Mass matrix*/
+	Vector<IssmDouble> *F = NULL;
+	//AllocateSystemMatricesx(&Mff,NULL,NULL,NULL,femmodel);
+
+	/*Create and assemble matrix*/
+	for(int i=0;i<femmodel->elements->Size();i++){
+		Element*       element = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
+		ElementVector* Fe = this->CreatePVectorFS(element);
+		if(F){
+			Fe->AddToGlobal(F);
+		}
+		delete Fe;
+	}
+	F->Assemble();
+
+	/*Assign output pointer*/
+	*pF=F;
+}
+
 /*Coupling (Tiling)*/
 ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingHOFS(Element* element){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 23131)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 23132)
@@ -96,4 +96,8 @@
 		void           InputUpdateFromSolutionFSXTH_d(Elements* elements,Parameters* parameters);
 		void           InputUpdateFromSolutionFSXTH_tau(Elements* elements,Parameters* parameters);
+
+		/*Schur complement conjugate gradient stuff*/
+		void SchurF(Vector<IssmDouble>** pF,FemModel* femmodel);
+
 		/*Coupling*/
 		ElementMatrix* CreateKMatrixCouplingHOFS(Element* element);
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_schurcg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_schurcg.cpp	(revision 23132)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_schurcg.cpp	(revision 23132)
@@ -0,0 +1,46 @@
+/*!\file: solutionsequence_schurcg.cpp
+ * \brief: numerical core of 
+ */ 
+
+#include "../toolkits/toolkits.h"
+#include "../classes/classes.h"
+#include "../shared/shared.h"
+#include "../modules/modules.h"
+#include "../analyses/analyses.h"
+
+#ifdef _HAVE_PETSC_
+void solutionsequence_schurcg(FemModel* femmodel){/*{{{*/
+
+	/*intermediary: */
+	int                 configuration_type,analysis_type;
+	Matrix<IssmDouble>* A  = NULL;
+	Matrix<IssmDouble>* B  = NULL;
+	Matrix<IssmDouble>* Mp = NULL;
+	Vector<IssmDouble>* ug = NULL;
+	Vector<IssmDouble>* uf = NULL;
+	Vector<IssmDouble>* pg = NULL;
+	Vector<IssmDouble>* pf = NULL;
+	Vector<IssmDouble>* f = NULL;
+
+	/*Recover parameters: */
+	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
+	femmodel->UpdateConstraintsx();
+
+	/*Create analysis*/
+	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+	if(analysis_type!=StressbalanceAnalysisEnum) _error_("not supported");
+	StressbalanceAnalysis* analysis = new StressbalanceAnalysis();
+	//analysis->SchurMp(&Mp,femmodel);
+	//analysis->SchurB(&B,femmodel);
+	//analysis->SchurA(&A,femmodel);
+	//analysis->SchurF(&F,femmodel);
+	delete analysis;
+
+	/*Go solve lower order solution*/
+	femmodel->profiler->Start(SOLVER);
+	//SolverxPetsc(&u,K,F,NULL,NULL,femmodel->parameters); 
+	femmodel->profiler->Stop(SOLVER);
+}/*}}}*/
+#else
+void solutionsequence_schurcg(FemModel* femmodel){_error_("PETSc needs to be installed");}
+#endif
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 23131)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 23132)
@@ -18,4 +18,5 @@
 void solutionsequence_newton(FemModel* femmodel);
 void solutionsequence_fct(FemModel* femmodel);
+void solutionsequence_schurcg(FemModel* femmodel);
 void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads);
 void solutionsequence_linear(FemModel* femmodel);
