function [HeatProblem,HeatProblem2] = HP_SolveMonolithic(HeatProblem,HeatProblem2)

npoin1 = HeatProblem.Data.nelem+1;
npoin2 = HeatProblem2.Data.nelem+1;

%Monolithic system
KMono = zeros(npoin1+npoin2-1);
FMono = zeros(npoin1+npoin2-1,1);

KMono(1:npoin1,1:npoin1) = HeatProblem.Matrices.K;
FMono(1:npoin1) = HeatProblem.Matrices.F;

KMono(npoin1:npoin1+npoin2-1,npoin1:npoin1+npoin2-1) = KMono(npoin1:npoin1+npoin2-1,npoin1:npoin1+npoin2-1) + HeatProblem2.Matrices.K;
FMono(npoin1:npoin1+npoin2-1) = FMono(npoin1:npoin1+npoin2-1) + HeatProblem2.Matrices.F;

%Solve Monolithic
UMono = KMono\FMono;

%Give it back to each problem
HeatProblem.Solution.U = UMono(1:npoin1);
HeatProblem = HP_PostSol(HeatProblem);

HeatProblem2.Solution.U = UMono(npoin1:end);
HeatProblem2 = HP_PostSol(HeatProblem2);


