diff --git a/dune/faultnetworks/levelinterfacenetworkproblem.hh b/dune/faultnetworks/levelinterfacenetworkproblem.hh
index 0ff14d8438729b0826b8d7d6333c4d9a3ebe5628..ffa55382f9082822e43d5416d89ea58411771a5d 100644
--- a/dune/faultnetworks/levelinterfacenetworkproblem.hh
+++ b/dune/faultnetworks/levelinterfacenetworkproblem.hh
@@ -10,7 +10,6 @@
 #include <dune/faultnetworks/faultinterface.hh>
 #include <dune/faultnetworks/oscdata.hh>
 
-//#include <dune/istl/superlu.hh>
 #include <dune/istl/umfpack.hh>
 
 #include <dune/faultnetworks/utils/debugutils.hh>
@@ -92,14 +91,14 @@ class LevelInterfaceNetworkProblem
             timer.reset();
             timer.start();
 
-            #if HAVE_SUPERLU
+            #if HAVE_UMFPACK
             Dune::InverseOperatorResult res;
             VectorType rhsCopy(rhs_);
 
             Dune::UMFPack<MatrixType> solver(matrix_);
             solver.apply(x_, rhsCopy, res);
             #else
-            #error No SuperLU!
+            #error No UMFPack!
             #endif
 
             std::cout << "Solving global problem took: " << timer.elapsed() << " seconds" << std::endl;
diff --git a/dune/faultnetworks/localproblem.hh b/dune/faultnetworks/localproblem.hh
index 9e409f4b239a1eefe7171de52ed10ade9494ede7..3da70633f19152350c2a445195a2ad1881f75f2d 100644
--- a/dune/faultnetworks/localproblem.hh
+++ b/dune/faultnetworks/localproblem.hh
@@ -7,7 +7,7 @@
 #include <dune/common/timer.hh>
 
 #include <dune/istl/matrixindexset.hh>
-//#include <dune/istl/superlu.hh>
+
 #include <dune/istl/umfpack.hh>
 
 #include <dune/fufem/assemblers/localoperatorassembler.hh>
@@ -146,7 +146,7 @@ public:
     }
 
     void solve(DomainType& x){
-        #if HAVE_SUPERLU
+        #if HAVE_UMFPACK
             RangeType localRhsCopy(localRhs);
             Dune::InverseOperatorResult res;
 
@@ -155,7 +155,7 @@ public:
             Dune::UMFPack<MatrixType> directSolver(localMat);
             directSolver.apply(x, localRhsCopy, res);
         #else
-        #error No SuperLU!
+        #error No UMFPack!
         #endif
     }
     
diff --git a/dune/faultnetworks/solvers/osccgsolver.cc b/dune/faultnetworks/solvers/osccgsolver.cc
index 67527edf233c5787f44129a04092a174095c6586..25dac2d5f575268ebdbe838e65dcd8da2c0caced 100644
--- a/dune/faultnetworks/solvers/osccgsolver.cc
+++ b/dune/faultnetworks/solvers/osccgsolver.cc
@@ -162,8 +162,6 @@ void OscCGSolver<MatrixType, VectorType, DGBasisType>::solve()
 	VectorType iterationError(*x_);
 	iterationError -= *fineSol_;
 
-    writeToVTK(fineBasis_, iterationError, "/storage/mi/podlesny/data/faultnetworks/iterationError/multilevel", "exactvertexdata_step_"+std::to_string(i));
-
 	double normOfIterationError = fineErrorNorm.operator()(iterationError);
     double convRate = normOfIterationError / normOfOldIterationError;
 
@@ -199,14 +197,14 @@ void OscCGSolver<MatrixType, VectorType, DGBasisType>::solve()
             std::cout << std::setiosflags(std::ios::scientific);
             std::cout << std::setw(15) << std::setprecision(7) << history;
             std::cout << std::resetiosflags(std::ios::scientific);
-/*
-	    std::cout << std::setiosflags(std::ios::scientific);
+
+            std::cout << std::setiosflags(std::ios::scientific);
             std::cout << std::setw(15) << std::setprecision(7) << normOfIterationError;
             std::cout << std::resetiosflags(std::ios::scientific);
 
-	    std::cout << std::setiosflags(std::ios::scientific);
+            std::cout << std::setiosflags(std::ios::scientific);
             std::cout << std::setw(15) << std::setprecision(7) << (terminationFactor_*normOfFinalDiscretizationError);
-            std::cout << std::resetiosflags(std::ios::scientific); */
+            std::cout << std::resetiosflags(std::ios::scientific);
 
             std::cout << std::endl;
         }
diff --git a/dune/faultnetworks/utils/levelinterfacenetworkwriter.hh b/dune/faultnetworks/utils/levelinterfacenetworkwriter.hh
index 0c76116b925222bb8ea07aba99a88b3459fd422d..b4f43e15c5417d324c286ba05535f9c2858b24b6 100644
--- a/dune/faultnetworks/utils/levelinterfacenetworkwriter.hh
+++ b/dune/faultnetworks/utils/levelinterfacenetworkwriter.hh
@@ -107,7 +107,7 @@ class LevelInterfaceNetworkWriter {
                 const std::vector<int>& intersectionsLevels = levelInterfaceNetwork.getIntersectionsLevels();
                 for (size_t i=0; i<intersections.size(); i++) {
                     if (highlightNewLevelInterfaces) {
-                        writeIntersection(intersections[i], file, 2*(intersectionsLevels[i]==levelInterfaceNetwork.level()));
+                        writeIntersection(intersections[i], file, 3*(intersectionsLevels[i]==levelInterfaceNetwork.level()));
                     } else {
                         writeIntersection(intersections[i], file, intersectionsLevels[i]);
                     }
diff --git a/src/cantorfaultnetworks/cantorconvergence.cc b/src/cantorfaultnetworks/cantorconvergence.cc
index f72393746222628a5ff29b68ffb4b19bbaf8a8c6..271b9fbdedd418317da988b66a473c40c3a645e6 100644
--- a/src/cantorfaultnetworks/cantorconvergence.cc
+++ b/src/cantorfaultnetworks/cantorconvergence.cc
@@ -79,7 +79,6 @@ int main(int argc, char** argv) { try
     #error No UG!
     #endif
 
-
     typedef typename GridType::LevelGridView GV;
     typedef FaultP1NodalBasis<GV, double> DGBasis;
     typedef typename DGBasis::LocalFiniteElement DGFE;
@@ -92,7 +91,7 @@ int main(int argc, char** argv) { try
     if (argc==2)
         ParameterTreeParser::readINITree(argv[1], parameterSet);
     else
-        ParameterTreeParser::readINITree("/home/mi/podlesny/software/dune/faultnetworks/src/cantorfaultnetworks/cantorconvergence.parset", parameterSet);
+        ParameterTreeParser::readINITree("cantorconvergence.parset", parameterSet);
 
     const std::string path = parameterSet.get<std::string>("path");
     const std::string resultPath = parameterSet.get<std::string>("resultPath");
@@ -154,12 +153,6 @@ int main(int argc, char** argv) { try
     CantorConvergenceFaultFactory<GridType> faultFactory(minResolution, exactLevelIdx, minCantorResolution, maxCantorLevels);
     const std::vector<std::shared_ptr<InterfaceNetwork<GridType>>>& interfaceNetworks = faultFactory.interfaceNetworks();
 
-    /*
-    for (size_t i=0; i<interfaceNetworks[1]->size(); i++) {
-        LevelInterfaceNetworkWriter networkWriter(resultPath + "levelinterfacenetwork_" + std::to_string(i) + ".tikz");
-        networkWriter.write(interfaceNetworks[1]->levelInterfaceNetwork(i), true);
-    }*/
-
     std::cout << "Interface networks built successfully!" << std::endl << std::endl;
 
     const GridType& grid = faultFactory.grid();
@@ -196,7 +189,6 @@ int main(int argc, char** argv) { try
 
     std::vector<std::shared_ptr<LocalInterfaceAssembler>> exactLocalInterfaceAssemblers(exactLevelInterfaceNetwork.size());
     for (size_t j=0; j<exactLocalInterfaceAssemblers.size(); j++) {
-        //const double pen = penaltyFactor;
         const int k = minCantorResolution + exactLevelInterfaceNetwork.getIntersectionsLevels().at(j);
         const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
         exactLocalInterfaceAssemblers[j] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -219,7 +211,6 @@ int main(int argc, char** argv) { try
 
         std::vector<std::shared_ptr<LocalInterfaceAssembler>> localInterfaceAssemblers(levelInterfaceNetwork.size());
         for (size_t j=0; j<localInterfaceAssemblers.size(); j++) {
-            //const double pen = penaltyFactor;
             const int k = minCantorResolution + levelInterfaceNetwork.getIntersectionsLevels().at(j);
             const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
             localInterfaceAssemblers[j] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -237,12 +228,10 @@ int main(int argc, char** argv) { try
         if (i==maxLevelIdx) {
             VectorType discErrorV(solutions[exactLevelIdx]);
             discErrorV -= solutions[maxLevelIdx];
-            //approxErrors[i] = approxError.two_norm();
             discError= energyNorm.operator ()(discErrorV);
         } else {
             VectorType approxError(solutions[maxLevelIdx]);
             approxError -= solutions[i];
-            //approxErrors[i] = approxError.two_norm();
             approxErrors[i] = energyNorm.operator ()(approxError);
         }
     }
diff --git a/src/cantorfaultnetworks/cantorconvergence.parset b/src/cantorfaultnetworks/cantorconvergence.parset
index 1be006a4b6e9615f16c77637e7695bea024bbcff..1fc5ed4f5761c61adb46f9189b565410932ae13f 100644
--- a/src/cantorfaultnetworks/cantorconvergence.parset
+++ b/src/cantorfaultnetworks/cantorconvergence.parset
@@ -1,5 +1,5 @@
-path        = /storage/mi/podlesny/data/osccoeff/
-resultPath  = /home/mi/podlesny/results/faultnetworks/cantorfaultnetworks/cantorconvergence/
+path        = ../data/
+resultPath  = ../results/cantorfaultnetworks/cantorconvergence
 
 
 [problem0]
diff --git a/src/cantorfaultnetworks/cantorfaultnetwork.cc b/src/cantorfaultnetworks/cantorfaultnetwork.cc
index a21885f3da57861c9b8d3ac0eb9baa730c8581de..695f5f9dd3deddda83a4a6d6ec7c98f18649fee6 100644
--- a/src/cantorfaultnetworks/cantorfaultnetwork.cc
+++ b/src/cantorfaultnetworks/cantorfaultnetwork.cc
@@ -93,7 +93,7 @@ int main(int argc, char** argv) { try
     if (argc==2)
         ParameterTreeParser::readINITree(argv[1], parameterSet);
     else
-        ParameterTreeParser::readINITree("/home/mi/podlesny/software/dune/faultnetworks/src/cantorfaultnetworks/cantorfaultnetwork.parset", parameterSet);
+        ParameterTreeParser::readINITree("cantorfaultnetwork.parset", parameterSet);
 
     const std::string path = parameterSet.get<std::string>("path");
     const std::string resultPath = parameterSet.get<std::string>("resultPath");
@@ -118,7 +118,6 @@ int main(int argc, char** argv) { try
 
     const int fineGridN = std::pow(2, fineResolution);
 
-
     std::ofstream out(resultPath + oscDataFile + "_" + std::to_string(coarseResolution) + "_" + std::to_string(fineResolution) + "_" + std::to_string(exactResolution) + ".log");
     std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
     std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt
@@ -160,9 +159,11 @@ int main(int argc, char** argv) { try
     // build multilevel cantor fault network
     CantorFaultFactory<GridType> faultFactory(levelToCantorLevel, coarseResolution, exactLevelIdx, maxCantorLevel);
     const InterfaceNetwork<GridType>& interfaceNetwork = faultFactory.interfaceNetwork();
-    for (size_t i=0; i<interfaceNetwork.size(); i++) {
-        LevelInterfaceNetworkWriter networkWriter(resultPath + "levelinterfacenetwork_" + std::to_string(i) + ".tikz");
-        networkWriter.write(interfaceNetwork.levelInterfaceNetwork(i));
+
+    if (problemCount==0) {
+        int writeLevel = 1;
+        LevelInterfaceNetworkWriter networkWriter(resultPath + "levelinterfacenetwork_" + std::to_string(writeLevel) + ".tikz");
+        networkWriter.write(interfaceNetwork.levelInterfaceNetwork(writeLevel), false);
     }
 
     const GridType& grid = faultFactory.grid();
@@ -191,8 +192,6 @@ int main(int argc, char** argv) { try
 
     std::vector<std::shared_ptr<LocalInterfaceAssembler>> coarseLocalInterfaceAssemblers(coarseLevelInterfaceNetwork.size());
     for (size_t i=0; i<coarseLocalInterfaceAssemblers.size(); i++) {
-        //const double pen = penaltyFactor;
-        //const double pen = penaltyFactor*std::pow(2.0, coarseResolution);
         const int k = minCantorResolution + coarseLevelInterfaceNetwork.getIntersectionsLevels().at(i);
         const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
         coarseLocalInterfaceAssemblers[i] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -216,8 +215,6 @@ int main(int argc, char** argv) { try
 
     std::vector<std::shared_ptr<LocalInterfaceAssembler>> exactLocalInterfaceAssemblers(exactLevelInterfaceNetwork.size());
     for (size_t i=0; i<exactLocalInterfaceAssemblers.size(); i++) {
-        //const double pen = penaltyFactor;
-        //const double pen = penaltyFactor*std::pow(2.0, coarseResolution + exactLevelInterfaceNetwork.getIntersectionsLevels().at(i));
         const int k = minCantorResolution + exactLevelInterfaceNetwork.getIntersectionsLevels().at(i);
         const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
         exactLocalInterfaceAssemblers[i] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -231,7 +228,6 @@ int main(int argc, char** argv) { try
 
     EnergyNorm<MatrixType, VectorType> exactEnergyNorm(exactGlobalAssembler.matrix());
 
-
     // ----------------------------------------------------------------
     // ---                set up cg solver                          ---
     // ----------------------------------------------------------------
@@ -247,8 +243,6 @@ int main(int argc, char** argv) { try
 
     std::vector<std::shared_ptr<LocalInterfaceAssembler>> fineLocalInterfaceAssemblers(fineLevelInterfaceNetwork.size());
     for (size_t i=0; i<fineLocalInterfaceAssemblers.size(); i++) {
-        //const double pen = penaltyFactor;
-        //const double pen = penaltyFactor*std::pow(2.0, coarseResolution + fineLevelInterfaceNetwork.getIntersectionsLevels().at(i));
         const int k = minCantorResolution + fineLevelInterfaceNetwork.getIntersectionsLevels().at(i);
         const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
         fineLocalInterfaceAssemblers[i] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -263,18 +257,12 @@ int main(int argc, char** argv) { try
 
     EnergyNorm<MatrixType, VectorType> fineEnergyNorm(fineGlobalAssembler.matrix());
 
-    // ---------------------------------------------------------------
     // multilevel transfer
-    // ---------------------------------------------------------------
     DGMGTransfer<DGBasis> coarseFineTransfer(coarseBasis, fineBasis);
 
     std::cout << "Setting up the preconditioner!" << std::endl;
 
     BitVector activeLevels(fineLevelIdx+1, true);
-    //activeLevels[0][0] = true;
-    //activeLevels[1][0] = false;
-    //activeLevels[2][0] = false;
-    //activeLevels[fineLevelIdx][0] = true;
 
     std::vector<std::shared_ptr<LocalOscAssembler>> localAssemblers;
     std::vector<std::vector<std::shared_ptr<LocalInterfaceAssembler>>> localIntersectionAssemblers;
@@ -289,8 +277,6 @@ int main(int argc, char** argv) { try
         std::vector<std::shared_ptr<LocalInterfaceAssembler>>& levelLocalIntersectionAssemblers = localIntersectionAssemblers[i];
         levelLocalIntersectionAssemblers.resize(levelInterfaceNetwork.size());
         for (size_t j=0; j<levelLocalIntersectionAssemblers.size(); j++) {
-            //const double pen = penaltyFactor;
-            //const double pen = penaltyFactor*std::pow(2.0, coarseResolution + levelInterfaceNetwork.getIntersectionsLevels().at(j));
             const int k = minCantorResolution + levelInterfaceNetwork.getIntersectionsLevels().at(j);
             const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
             levelLocalIntersectionAssemblers[j] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -299,7 +285,6 @@ int main(int argc, char** argv) { try
 
     typedef MultilevelPatchPreconditioner<DGBasis, LocalOscAssembler, LocalInterfaceAssembler, MatrixType, VectorType> MultilevelPatchPreconditioner;
     typedef typename MultilevelPatchPreconditioner::LevelPatchPreconditionerType LevelPatchPreconditioner;
-    //typedef typename MultilevelPatchPreconditioner::LevelGlobalPreconditionerType LevelGlobalPreconditioner;
     MultilevelPatchPreconditioner::Mode preconditionerMode = MultilevelPatchPreconditioner::Mode::additive;
 
     MultilevelPatchPreconditioner preconditioner(interfaceNetwork, activeLevels, localAssemblers, localIntersectionAssemblers, preconditionerMode);
@@ -313,33 +298,12 @@ int main(int argc, char** argv) { try
 
     std::cout << "Setup complete, starting preconditioned cg iteration!" << std::endl;
     std::cout << std::endl << std::endl;
-    
-    /*Dune::BlockVector<Dune::FieldVector<double,1>> initialError(fineX.size());
-    initialError = initialX;
-    initialError -= fineX;
-    std::cout << "Initial error in energy norm: " << energyNorm.operator()(initialError) << std::endl;
-    std::cout << "Initial error in two norm: " << initialError.two_norm() << std::endl << std::endl;*/
-
 
     VectorType initialX;
     coarseFineTransfer.prolong(coarseSol, initialX);
 
-    VectorType initialXCopy(initialX);
-    VectorType fineRhsCopy(fineRhs);
     VectorType rhs(fineRhs);
 
-    //print(initialX, "initialX");
-    //print(fineRhs, "fineRhs");
-    //print(exactSol, "exactSol");
-    //print(fineSol, "fineSol");
-    
-    /* Basis fineContBasis(fineGridView);
-    std::cout << "fineContBasis.size(): " << fineContBasis.size() << std::endl;
-    DGMGTransfer<Basis> contMGTransfer(coarseBasis, fineContBasis);
-
-    Basis exactContBasis(exactGridView);
-    std::cout << "exactContBasis.size(): " << exactContBasis.size() << std::endl; */
-
     DGMGTransfer<DGBasis> discMGTransfer(fineBasis, exactBasis);
 
     // solve
@@ -351,31 +315,9 @@ int main(int argc, char** argv) { try
     solver.preprocess();
     solver.solve();
 
-
-    /*
-    VectorType finalError(fineSol.size());
-    finalError = initialX;
-    finalError -= fineSol;
-    std::cout << "Final error in energy norm: " << fineEnergyNorm.operator()(finalError) << std::endl;
-    std::cout << "Final error in two norm: " << finalError.two_norm() << std::endl << std::endl;*/
-
     std::cout << std::endl;
     std::cout << "Total time: " << totalTimer.elapsed() << " seconds." << std::endl; 
 
-    /*
-    // regular unpreconditioned cg solver for comparisson
-    std::cout << "Setup complete, starting cg iteration!" << std::endl;
-    std::cout << std::endl;
-    
-    // solve
-    OscCGSolver<MatrixType, VectorType, DGBasis >
-    regSolver(fineBasis, &fineGlobalAssembler.matrix(), &initialXCopy, &fineRhsCopy, nullptr,
-                    maxIterations, solverTolerance, &exactEnergyNorm,
-                    Solver::FULL, &exactSol, &fineSol, discMGTransfer, 1.0, true);
-    regSolver.check();
-    regSolver.preprocess();
-    regSolver.solve();*/
-
     std::cout.rdbuf(coutbuf); //reset to standard output again
 
     std::cout << "Problem " << problemCount << " done!" << std::endl;
diff --git a/src/cantorfaultnetworks/cantorfaultnetwork.parset b/src/cantorfaultnetworks/cantorfaultnetwork.parset
index 4215d68442f32e2ab89ad697fcc182faa6a9a31e..6aa5bb6e122b40c435892505464dd9ce4582568a 100644
--- a/src/cantorfaultnetworks/cantorfaultnetwork.parset
+++ b/src/cantorfaultnetworks/cantorfaultnetwork.parset
@@ -1,5 +1,5 @@
-path        = /storage/mi/podlesny/data/osccoeff/
-resultPath  = /home/mi/podlesny/results/faultnetworks/cantorfaultnetworks/cantorfaultnetwork/
+path        = ../data/
+resultPath  = ../results/cantorfaultnetworks/
 
 
 
@@ -10,7 +10,7 @@ oscDataFile         = oscDataLaplace32.mat
 coarseResolution = 4
 fineResolution = 5
 exactResolution = 10
-minCantorResolution = 1
+minCantorResolution = 4
 
 penaltyFactor = 1
 patchDepth = 1
@@ -29,7 +29,7 @@ oscDataFile         = oscDataLaplace32.mat
 coarseResolution = 4
 fineResolution = 6
 exactResolution = 10
-minCantorResolution = 1
+minCantorResolution = 4
 
 penaltyFactor = 1
 patchDepth = 1
diff --git a/src/data/oscDataLaplace32.mat b/src/data/oscDataLaplace32.mat
new file mode 100644
index 0000000000000000000000000000000000000000..e422df8bbe17487fb5afcf7c258f6aa081772d3d
--- /dev/null
+++ b/src/data/oscDataLaplace32.mat
@@ -0,0 +1,33 @@
+32 32
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/src/geofaultnetworks/geofaultnetwork.cc b/src/geofaultnetworks/geofaultnetwork.cc
index 1572c52fcdad3990703c8a48bd17748e9b275a82..1da03affcfa8491b56bb9ec001924f408dfbb091 100644
--- a/src/geofaultnetworks/geofaultnetwork.cc
+++ b/src/geofaultnetworks/geofaultnetwork.cc
@@ -69,8 +69,6 @@ int main(int argc, char** argv) { try
     MPIHelper::instance(argc, argv);
 
     const int dim = 2;
-    //typedef double ctype;
-
 
     typedef typename Dune::FieldVector<double, dim> WorldVectorType;
     typedef typename Dune::BlockVector<Dune::FieldVector<double,1>> VectorType;
@@ -98,7 +96,7 @@ int main(int argc, char** argv) { try
     if (argc==2)
         ParameterTreeParser::readINITree(argv[1], parameterSet);
     else
-        ParameterTreeParser::readINITree("/home/mi/podlesny/software/dune/faultnetworks/src/geofaultnetworks/geofaultnetwork.parset", parameterSet);
+        ParameterTreeParser::readINITree("geofaultnetwork.parset", parameterSet);
 
     const std::string path = parameterSet.get<std::string>("path");
     const std::string resultPath = parameterSet.get<std::string>("resultPath");
@@ -121,12 +119,9 @@ int main(int argc, char** argv) { try
 
     const int maxIterations = problemParameters.get<int>("maxIterations");
     const double solverTolerance = problemParameters.get<double>("tol");
-    //const bool useExactSol = problemParameters.get<bool>("useExactSol");
 
-    //const int coarseGridN = std::pow(2, coarseResolution);
     const int fineGridN = std::pow(2, fineResolution);
 
-
     std::ofstream out(resultPath + oscDataFile + "_" + std::to_string(coarseResolution) + "_" + std::to_string(fineResolution) + "_" + std::to_string(exactResolution) + "_" + std::to_string(faultCount) + ".log");
     std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
     std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
@@ -157,8 +152,6 @@ int main(int argc, char** argv) { try
     std::cout << "OscData file read successfully!" << std::endl << std::endl;
 
     const int exactLevelIdx = exactResolution - coarseResolution;
-    // TODO: reverse after HomTap computations
-    //const int fineLevelIdx = fineResolution - coarseResolution;
     int fineLevelIdx = exactLevelIdx - 1;
 
     /*
@@ -189,7 +182,6 @@ int main(int argc, char** argv) { try
         }
     }
 
-    // das auch
     fineLevelIdx = fineResolution - coarseResolution;
 
     print(faultToLevel, "faultToLevel: ");
@@ -199,15 +191,12 @@ int main(int argc, char** argv) { try
     const GridType& grid = faultFactory.grid();
     const InterfaceNetwork<GridType>& interfaceNetwork = faultFactory.interfaceNetwork();
 
-    for (size_t i=0; i<interfaceNetwork.size(); i++) {
-        LevelInterfaceNetworkWriter networkWriter(resultPath + "levelinterfacenetwork_" + std::to_string(i) + ".tikz");
-        networkWriter.write(interfaceNetwork.levelInterfaceNetwork(i));
+    if (problemCount==0) {
+        int writeLevel = fineLevelIdx;
+        LevelInterfaceNetworkWriter networkWriter(resultPath + "levelinterfacenetwork_" + std::to_string(writeLevel) + ".tikz");
+        networkWriter.write(interfaceNetwork.levelInterfaceNetwork(writeLevel), false);
     }
 
-    /*int writeLevel = fineLevelIdx;
-    LevelInterfaceNetworkWriter networkWriter(resultPath + "levelinterfacenetwork_" + std::to_string(writeLevel) + ".tikz");
-    networkWriter.write(interfaceNetwork.levelInterfaceNetwork(writeLevel), true);*/
-
     OscData<GridType, OscMatrixType> oscData(grid, oscGridLevelIdx);
     oscData.set(matrix);
     OscDataHierarchy<GridType, OscMatrixType> oscDataHierarchy(oscData);
@@ -232,8 +221,6 @@ int main(int argc, char** argv) { try
 
     std::vector<std::shared_ptr<LocalInterfaceAssembler>> coarseLocalInterfaceAssemblers(coarseLevelInterfaceNetwork.size());
     for (size_t i=0; i<coarseLocalInterfaceAssemblers.size(); i++) {
-        //const double pen = penaltyFactor;
-        //const double pen = penaltyFactor*std::pow(2.0, coarseResolution);
         const int k = coarseResolution + coarseLevelInterfaceNetwork.getIntersectionsLevels().at(i);
         const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
         coarseLocalInterfaceAssemblers[i] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -257,21 +244,16 @@ int main(int argc, char** argv) { try
 
     std::vector<std::shared_ptr<LocalInterfaceAssembler>> exactLocalInterfaceAssemblers(exactLevelInterfaceNetwork.size());
     for (size_t i=0; i<exactLocalInterfaceAssemblers.size(); i++) {
-        //const double pen = penaltyFactor;
-        //const double pen = penaltyFactor*std::pow(2.0, coarseResolution + exactLevelInterfaceNetwork.getIntersectionsLevels().at(i));
         const int k = coarseResolution + exactLevelInterfaceNetwork.getIntersectionsLevels().at(i);
         const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
         exactLocalInterfaceAssemblers[i] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
     }
 
     exactGlobalAssembler.assemble(exactLocalAssembler, exactLocalInterfaceAssemblers, l2FunctionalAssembler);
-    // TODO: turn on exact sol? needed for computation of discretization error
-    //exactGlobalAssembler.solve();
-
-    //const VectorType& exactSol = exactGlobalAssembler.getSol();
+    exactGlobalAssembler.solve();
 
+    const VectorType& exactSol = exactGlobalAssembler.getSol();
     const DGBasis& exactBasis = exactGlobalAssembler.basis();
-    VectorType exactSol(exactBasis.size(), 0);
 
     EnergyNorm<MatrixType, VectorType> exactEnergyNorm(exactGlobalAssembler.matrix());
 
@@ -290,8 +272,6 @@ int main(int argc, char** argv) { try
 
     std::vector<std::shared_ptr<LocalInterfaceAssembler>> fineLocalInterfaceAssemblers(fineLevelInterfaceNetwork.size());
     for (size_t i=0; i<fineLocalInterfaceAssemblers.size(); i++) {
-        //const double pen = penaltyFactor;
-        //const double pen = penaltyFactor*std::pow(2.0, coarseResolution + fineLevelInterfaceNetwork.getIntersectionsLevels().at(i));
         const int k = coarseResolution + fineLevelInterfaceNetwork.getIntersectionsLevels().at(i);
         const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
         fineLocalInterfaceAssemblers[i] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -306,18 +286,12 @@ int main(int argc, char** argv) { try
 
     EnergyNorm<MatrixType, VectorType> fineEnergyNorm(fineGlobalAssembler.matrix());
 
-    // ---------------------------------------------------------------
     // multilevel transfer
-    // ---------------------------------------------------------------
     DGMGTransfer<DGBasis> coarseFineTransfer(coarseBasis, fineBasis);
 
     std::cout << "Setting up the preconditioner!" << std::endl;
 
     BitVector activeLevels(fineLevelIdx+1, true);
-    //activeLevels[0][0] = true;
-    //activeLevels[1][0] = false;
-    //activeLevels[2][0] = false;
-    //activeLevels[fineLevelIdx][0] = true;
 
     std::vector<std::shared_ptr<LocalOscAssembler>> localAssemblers;
     std::vector<std::vector<std::shared_ptr<LocalInterfaceAssembler>>> localIntersectionAssemblers;
@@ -332,8 +306,6 @@ int main(int argc, char** argv) { try
         std::vector<std::shared_ptr<LocalInterfaceAssembler>>& levelLocalIntersectionAssemblers = localIntersectionAssemblers[i];
         levelLocalIntersectionAssemblers.resize(levelInterfaceNetwork.size());
         for (size_t j=0; j<levelLocalIntersectionAssemblers.size(); j++) {
-            //const double pen = penaltyFactor;
-            //const double pen = penaltyFactor*std::pow(2.0, coarseResolution + levelInterfaceNetwork.getIntersectionsLevels().at(j));
             const int k = coarseResolution + levelInterfaceNetwork.getIntersectionsLevels().at(j);
             const double pen = (1+1.0/c) * std::pow(1.0+c, k) * std::pow(2.0, k-1);
             levelLocalIntersectionAssemblers[j] = std::make_shared<LocalInterfaceAssembler>(B, 2, pen);
@@ -342,7 +314,6 @@ int main(int argc, char** argv) { try
 
     typedef MultilevelPatchPreconditioner<DGBasis, LocalOscAssembler, LocalInterfaceAssembler, MatrixType, VectorType> MultilevelPatchPreconditioner;
     typedef typename MultilevelPatchPreconditioner::LevelPatchPreconditionerType LevelPatchPreconditioner;
-    //typedef typename MultilevelPatchPreconditioner::LevelGlobalPreconditionerType LevelGlobalPreconditioner;
     MultilevelPatchPreconditioner::Mode preconditionerMode = MultilevelPatchPreconditioner::Mode::additive;
 
     MultilevelPatchPreconditioner preconditioner(interfaceNetwork, activeLevels, localAssemblers, localIntersectionAssemblers, preconditionerMode);
@@ -357,32 +328,11 @@ int main(int argc, char** argv) { try
     std::cout << "Setup complete, starting preconditioned cg iteration!" << std::endl;
     std::cout << std::endl << std::endl;
     
-    /*Dune::BlockVector<Dune::FieldVector<double,1>> initialError(fineX.size());
-    initialError = initialX;
-    initialError -= fineX;
-    std::cout << "Initial error in energy norm: " << energyNorm.operator()(initialError) << std::endl;
-    std::cout << "Initial error in two norm: " << initialError.two_norm() << std::endl << std::endl;*/
-
-
     VectorType initialX;
     coarseFineTransfer.prolong(coarseSol, initialX);
 
-    VectorType initialXCopy(initialX);
-    VectorType fineRhsCopy(fineRhs);
     VectorType rhs(fineRhs);
 
-    //print(initialX, "initialX");
-    //print(fineRhs, "fineRhs");
-    //print(exactSol, "exactSol");
-    //print(fineSol, "fineSol");
-    
-    /* Basis fineContBasis(fineGridView);
-    std::cout << "fineContBasis.size(): " << fineContBasis.size() << std::endl;
-    DGMGTransfer<Basis> contMGTransfer(coarseBasis, fineContBasis);
-
-    Basis exactContBasis(exactGridView);
-    std::cout << "exactContBasis.size(): " << exactContBasis.size() << std::endl; */
-
     DGMGTransfer<DGBasis> discMGTransfer(fineBasis, exactBasis);
 
     // solve
@@ -394,32 +344,9 @@ int main(int argc, char** argv) { try
     solver.preprocess();
     solver.solve();
 
-
-    /*
-    VectorType finalError(fineSol.size());
-    finalError = initialX;
-    finalError -= fineSol;
-    std::cout << "Final error in energy norm: " << fineEnergyNorm.operator()(finalError) << std::endl;
-    std::cout << "Final error in two norm: " << finalError.two_norm() << std::endl << std::endl;*/
-
     std::cout << std::endl;
     std::cout << "Total time: " << totalTimer.elapsed() << " seconds." << std::endl; 
 
-    // regular unpreconditioned cg solver for comparisson
-/*
-    std::cout << "Setup complete, starting cg iteration!" << std::endl;
-    std::cout << std::endl;
-    
-    // solve
-    OscCGSolver<MatrixType, VectorType, DGBasis >
-    regSolver(fineBasis, &fineGlobalAssembler.matrix(), &initialXCopy, &fineRhsCopy, nullptr,
-                    maxIterations, solverTolerance, &exactEnergyNorm,
-                    Solver::FULL, &exactSol, &fineSol, discMGTransfer, 1.0, true);
-    regSolver.check();
-    regSolver.preprocess();
-    regSolver.solve();
-*/
-    // TODO: use once debugging finished
     std::cout.rdbuf(coutbuf); //reset to standard output again
 
     std::cout << "Problem " << problemCount << " done!" << std::endl;
diff --git a/src/geofaultnetworks/geofaultnetwork.parset b/src/geofaultnetworks/geofaultnetwork.parset
index 5deed292facda5f71d2c06a4141d265e6921b4f0..3bb72548ad3d5ef3c6a5254a82caa0e458600e59 100644
--- a/src/geofaultnetworks/geofaultnetwork.parset
+++ b/src/geofaultnetworks/geofaultnetwork.parset
@@ -1,5 +1,5 @@
-path        = /storage/mi/podlesny/data/osccoeff/
-resultPath  = /home/mi/podlesny/results/faultnetworks/geofaultnetworks/testing/fractalhomogenization/
+path        = ../data/
+resultPath  = ../results/geofaultnetworks/
 
 
 [problem0]
@@ -17,6 +17,77 @@ patchDepth = 1
 # cg solver
 tol = 1e-12
 maxIterations = 8
-useExactSol = 0
+
+###########################################
+
+[problem1]
+oscDataFile         = oscDataLaplace32.mat
+
+# level resolution in 2^(-...)
+coarseResolution = 4
+fineResolution = 6
+exactResolution = 10
+faultCount = 30
+
+penaltyFactor = 1
+patchDepth = 1
+
+# cg solver
+tol = 1e-12
+maxIterations = 8
+
+###########################################
+
+[problem2]
+oscDataFile         = oscDataLaplace32.mat
+
+# level resolution in 2^(-...)
+coarseResolution = 4
+fineResolution = 7
+exactResolution = 10
+faultCount = 30
+
+penaltyFactor = 1
+patchDepth = 1
+
+# cg solver
+tol = 1e-12
+maxIterations = 8
+
+###########################################
+
+[problem3]
+oscDataFile         = oscDataLaplace32.mat
+
+# level resolution in 2^(-...)
+coarseResolution = 4
+fineResolution = 8
+exactResolution = 10
+faultCount = 30
+
+penaltyFactor = 1
+patchDepth = 1
+
+# cg solver
+tol = 1e-12
+maxIterations = 8
+
+###########################################
+
+[problem4]
+oscDataFile         = oscDataLaplace32.mat
+
+# level resolution in 2^(-...)
+coarseResolution = 4
+fineResolution = 9
+exactResolution = 10
+faultCount = 30
+
+penaltyFactor = 1
+patchDepth = 1
+
+# cg solver
+tol = 1e-12
+maxIterations = 8
 
 ###########################################
diff --git a/src/results/cantorfaultnetworks/plot.tex b/src/results/cantorfaultnetworks/plot.tex
new file mode 100644
index 0000000000000000000000000000000000000000..5f0576d36dfcf10200cfa18a40fe4f7450244d54
--- /dev/null
+++ b/src/results/cantorfaultnetworks/plot.tex
@@ -0,0 +1,9 @@
+\documentclass[tikz]{standalone}
+
+\usepackage{tikz}
+
+\begin{document}
+
+\def\scale{3}
+\input{levelinterfacenetwork_1.tikz}
+\end{document}
\ No newline at end of file
diff --git a/src/results/geofaultnetworks/plot.tex b/src/results/geofaultnetworks/plot.tex
new file mode 100644
index 0000000000000000000000000000000000000000..b9761d1b2e3028c434b385d429265eb0356586b2
--- /dev/null
+++ b/src/results/geofaultnetworks/plot.tex
@@ -0,0 +1,9 @@
+\documentclass[tikz]{standalone}
+
+\usepackage{tikz}
+
+\begin{document}
+
+\def\scale{3}
+\input{levelinterfacenetwork_5.tikz}
+\end{document}
\ No newline at end of file