diff --git a/src/scheme/LocalDtHyperelasticSolver.cpp b/src/scheme/LocalDtHyperelasticSolver.cpp
index 69f3ed208be443d8763475af58284187ad6d048c..1b31007949c9d9b4561b37ede9318d57a9cd91a6 100644
--- a/src/scheme/LocalDtHyperelasticSolver.cpp
+++ b/src/scheme/LocalDtHyperelasticSolver.cpp
@@ -7,6 +7,7 @@
 #include <mesh/MeshFlatNodeBoundary.hpp>
 #include <mesh/MeshNodeBoundary.hpp>
 #include <mesh/SubItemValuePerItemVariant.hpp>
+#include <scheme/CouplingBoundaryConditionDescriptor.hpp>
 #include <scheme/DirichletBoundaryConditionDescriptor.hpp>
 #include <scheme/DiscreteFunctionP0.hpp>
 #include <scheme/DiscreteFunctionUtils.hpp>
@@ -16,14 +17,14 @@
 #include <scheme/IBoundaryConditionDescriptor.hpp>
 #include <scheme/IDiscreteFunctionDescriptor.hpp>
 #include <scheme/SymmetryBoundaryConditionDescriptor.hpp>
-#include <scheme/CouplingBoundaryConditionDescriptor.hpp>
 #include <utils/Socket.hpp>
 
 #include <variant>
 #include <vector>
 
 template <size_t Dimension>
-class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public LocalDtHyperelasticSolverHandler::ILocalDtHyperelasticSolver
+class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final
+  : public LocalDtHyperelasticSolverHandler::ILocalDtHyperelasticSolver
 {
  private:
   using Rdxd = TinyMatrix<Dimension>;
@@ -48,7 +49,7 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
                                          NormalStressBoundaryCondition,
                                          SymmetryBoundaryCondition,
                                          VelocityBoundaryCondition,
-					 CouplingBoundaryCondition>;
+                                         CouplingBoundaryCondition>;
 
   using BoundaryConditionList = std::vector<BoundaryCondition>;
 
@@ -293,10 +294,11 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
         break;
       }
       case IBoundaryConditionDescriptor::Type::coupling: {
-	const CouplingBoundaryConditionDescriptor& coupling_bc_descriptor = dynamic_cast<const CouplingBoundaryConditionDescriptor&>(*bc_descriptor);
-        bc_list.emplace_back(
-			     CouplingBoundaryCondition(getMeshNodeBoundary(mesh, bc_descriptor->boundaryDescriptor()),coupling_bc_descriptor.label()));
-	break;
+        const CouplingBoundaryConditionDescriptor& coupling_bc_descriptor =
+          dynamic_cast<const CouplingBoundaryConditionDescriptor&>(*bc_descriptor);
+        bc_list.emplace_back(CouplingBoundaryCondition(getMeshNodeBoundary(mesh, bc_descriptor->boundaryDescriptor()),
+                                                       coupling_bc_descriptor.label()));
+        break;
       }
       default: {
         is_valid_boundary_condition = false;
@@ -317,17 +319,17 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
   void _applySymmetryBC(const BoundaryConditionList& bc_list, NodeValue<Rdxd>& Ar, NodeValue<Rd>& br) const;
   void _applyVelocityBC(const BoundaryConditionList& bc_list, NodeValue<Rdxd>& Ar, NodeValue<Rd>& br) const;
   void _applyCouplingBC(NodeValue<Rdxd>& Ar1,
-			NodeValue<Rdxd>& Ar2,
-			NodeValue<Rd>& br1,
-			NodeValue<Rd>& br2,
-			const std::vector<NodeId>& map1,
-			const std::vector<NodeId>& map2) const;
+                        NodeValue<Rdxd>& Ar2,
+                        NodeValue<Rd>& br1,
+                        NodeValue<Rd>& br2,
+                        const std::vector<NodeId>& map1,
+                        const std::vector<NodeId>& map2) const;
   void _applyCouplingBC(const MeshType& mesh,
-			NodeValue<Rd>& ur,
-			NodeValue<Rd>& CR_ur,
-			NodeValuePerCell<Rd>& Fjr,
-			NodeValuePerCell<Rd>& CR_Fjr,
-			const std::vector<NodeId>& map2) const;
+                        NodeValue<Rd>& ur,
+                        NodeValue<Rd>& CR_ur,
+                        NodeValuePerCell<Rd>& Fjr,
+                        NodeValuePerCell<Rd>& CR_Fjr,
+                        const std::vector<NodeId>& map2) const;
   void
   _applyBoundaryConditions(const BoundaryConditionList& bc_list,
                            const MeshType& mesh,
@@ -376,58 +378,61 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
     return F;
   }
 
-  std::tuple<std::vector<NodeId>,
-	     std::vector<NodeId>>
+  std::tuple<std::vector<NodeId>, std::vector<NodeId>>
   _computeMapping(std::shared_ptr<const IMesh>& i_mesh1,
-		  std::shared_ptr<const IMesh>& i_mesh2,
-		  const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list1,
-		  const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list2) const
+                  std::shared_ptr<const IMesh>& i_mesh2,
+                  const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list1,
+                  const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list2) const
   {
     const MeshType& mesh1 = dynamic_cast<const MeshType&>(*i_mesh1);
     const MeshType& mesh2 = dynamic_cast<const MeshType&>(*i_mesh2);
-    
+
     const BoundaryConditionList bc_list1 = this->_getBCList(mesh1, bc_descriptor_list1);
     const BoundaryConditionList bc_list2 = this->_getBCList(mesh2, bc_descriptor_list2);
-    
+
     std::vector<NodeId> map1;
     std::vector<NodeId> map2;
-    
+
     NodeValue<Rd> xr1 = copy(mesh1.xr());
     NodeValue<Rd> xr2 = copy(mesh2.xr());
-    for(const auto& boundary_condition1 : bc_list1){
-      std::visit([&](auto&& bc1) {
-	using T1 = std::decay_t<decltype(bc1)>;
-	if constexpr (std::is_same_v<CouplingBoundaryCondition,T1>){
-	  const auto& node_list1 = bc1.nodeList();
-	  for(const auto& boundary_condition2 : bc_list2){
-	    std::visit([&](auto&& bc2) {
-	      using T2 = std::decay_t<decltype(bc2)>;
-	      if constexpr (std::is_same_v<CouplingBoundaryCondition,T2>){
-		if(bc1.label() == bc2.label()){
-		  const auto& node_list2 = bc2.nodeList();
-		  for(size_t i = 0; i<node_list1.size(); i++){
-		    NodeId node_id1 = node_list1[i];
-		    NodeId node_id2;
-		    for(size_t j = 0; j<node_list2.size(); j++){
-		      node_id2 = node_list2[j];
-		      double err = 0;
-		      for(size_t j = 0; j<Dimension; j++){
-			err += (xr1[node_id1][j] - xr2[node_id2][j])*(xr1[node_id1][j] - xr2[node_id2][j]);
-		      }
-		      if(sqrt(err) < 1e-14){
-			map1.push_back(node_id1);
-			map2.push_back(node_id2);
-		      }
-		    }
-		  }
-		}
-	      }
-	    },boundary_condition2);
-	  }
-	}
-      },boundary_condition1);
+    for (const auto& boundary_condition1 : bc_list1) {
+      std::visit(
+        [&](auto&& bc1) {
+          using T1 = std::decay_t<decltype(bc1)>;
+          if constexpr (std::is_same_v<CouplingBoundaryCondition, T1>) {
+            const auto& node_list1 = bc1.nodeList();
+            for (const auto& boundary_condition2 : bc_list2) {
+              std::visit(
+                [&](auto&& bc2) {
+                  using T2 = std::decay_t<decltype(bc2)>;
+                  if constexpr (std::is_same_v<CouplingBoundaryCondition, T2>) {
+                    if (bc1.label() == bc2.label()) {
+                      const auto& node_list2 = bc2.nodeList();
+                      for (size_t i = 0; i < node_list1.size(); i++) {
+                        NodeId node_id1 = node_list1[i];
+                        NodeId node_id2;
+                        for (size_t j = 0; j < node_list2.size(); j++) {
+                          node_id2   = node_list2[j];
+                          double err = 0;
+                          for (size_t j = 0; j < Dimension; j++) {
+                            err += (xr1[node_id1][j] - xr2[node_id2][j]) * (xr1[node_id1][j] - xr2[node_id2][j]);
+                          }
+                          if (sqrt(err) < 1e-14) {
+                            map1.push_back(node_id1);
+                            map2.push_back(node_id2);
+                          }
+                        }
+                      }
+                    }
+                  }
+                },
+                boundary_condition2);
+            }
+          }
+        },
+        boundary_condition1);
     }
-    return std::make_tuple(map1,map2);
+    return std::make_tuple(map1, map2);
   }
 
  public:
@@ -475,11 +480,11 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
   }
 
   std::tuple<const std::shared_ptr<const ItemValueVariant>,
-	     const std::shared_ptr<const SubItemValuePerItemVariant>,
-	     const std::shared_ptr<const ItemValueVariant>,
-	     const std::shared_ptr<const SubItemValuePerItemVariant>,
-	     NodeValue<Rd>,
-	     NodeValuePerCell<Rd>>
+             const std::shared_ptr<const SubItemValuePerItemVariant>,
+             const std::shared_ptr<const ItemValueVariant>,
+             const std::shared_ptr<const SubItemValuePerItemVariant>,
+             NodeValue<Rd>,
+             NodeValuePerCell<Rd>>
   compute_fluxes(const SolverType& solver_type,
                  const std::shared_ptr<const DiscreteFunctionVariant>& rho1_v,
                  const std::shared_ptr<const DiscreteFunctionVariant>& aL1_v,
@@ -493,8 +498,8 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
                  const std::shared_ptr<const DiscreteFunctionVariant>& u2_v,
                  const std::shared_ptr<const DiscreteFunctionVariant>& sigma2_v,
                  const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list2,
-		 const std::vector<NodeId>& map1,
-		 const std::vector<NodeId>& map2) const
+                 const std::vector<NodeId>& map1,
+                 const std::vector<NodeId>& map2) const
   {
     std::shared_ptr i_mesh1 = getCommonMesh({rho1_v, aL1_v, aT1_v, u1_v, sigma1_v});
     std::shared_ptr i_mesh2 = getCommonMesh({rho2_v, aL2_v, aT2_v, u2_v, sigma2_v});
@@ -505,11 +510,11 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
     if (not checkDiscretizationType({rho1_v, aL1_v, u1_v, sigma1_v}, DiscreteFunctionType::P0)) {
       throw NormalError("hyperelastic solver expects P0 functions");
     }
-     if (not i_mesh2) {
+    if (not i_mesh2) {
       throw NormalError("discrete functions are not defined on the same mesh");
     }
 
-     if (not checkDiscretizationType({rho2_v, aL2_v, u2_v, sigma2_v}, DiscreteFunctionType::P0)) {
+    if (not checkDiscretizationType({rho2_v, aL2_v, u2_v, sigma2_v}, DiscreteFunctionType::P0)) {
       throw NormalError("acoustic solver expects P0 functions");
     }
 
@@ -527,43 +532,39 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
     const DiscreteScalarFunction& aT2    = aT2_v->get<DiscreteScalarFunction>();
     const DiscreteTensorFunction& sigma2 = sigma2_v->get<DiscreteTensorFunction>();
 
-
     NodeValuePerCell<const Rdxd> Ajr1 = this->_computeAjr(solver_type, mesh1, rho1 * aL1, rho1 * aT1);
-
     NodeValuePerCell<const Rdxd> Ajr2 = this->_computeAjr(solver_type, mesh2, rho2 * aL2, rho2 * aT2);
 
     NodeValue<Rdxd> Ar1 = this->_computeAr(mesh1, Ajr1);
     NodeValue<Rd> br1   = this->_computeBr(mesh1, Ajr1, u1, sigma1);
     NodeValue<Rdxd> Ar2 = this->_computeAr(mesh2, Ajr2);
     NodeValue<Rd> br2   = this->_computeBr(mesh2, Ajr2, u2, sigma2);
+    this->_applyCouplingBC(Ar1, Ar2, br1, br2, map1, map2);
 
     const BoundaryConditionList bc_list1 = this->_getBCList(mesh1, bc_descriptor_list1);
     const BoundaryConditionList bc_list2 = this->_getBCList(mesh2, bc_descriptor_list2);
     this->_applyBoundaryConditions(bc_list1, mesh1, Ar1, br1);
     this->_applyBoundaryConditions(bc_list2, mesh2, Ar2, br2);
-    this->_applyCouplingBC(Ar1,Ar2,br1,br2,map1,map2);
 
     synchronize(Ar1);
     synchronize(br1);
     synchronize(Ar2);
     synchronize(br2);
 
-    NodeValue<Rd> ur1         = this->_computeUr(mesh1, Ar1, br1);
-    NodeValuePerCell<Rd> Fjr1 = this->_computeFjr(mesh1, Ajr1, ur1, u1, sigma1);
-    NodeValue<Rd> ur2         = this->_computeUr(mesh2, Ar2, br2);
-    NodeValuePerCell<Rd> Fjr2 = this->_computeFjr(mesh2, Ajr2, ur2, u2, sigma2);
-    NodeValue<Rd> CR_ur             = this->_computeUr(mesh2, Ar2, br2);
-    NodeValuePerCell<Rd> CR_Fjr     = this->_computeFjr(mesh2, Ajr2, ur2, u2, sigma2);
+    NodeValue<Rd> ur1           = this->_computeUr(mesh1, Ar1, br1);
+    NodeValuePerCell<Rd> Fjr1   = this->_computeFjr(mesh1, Ajr1, ur1, u1, sigma1);
+    NodeValue<Rd> ur2           = this->_computeUr(mesh2, Ar2, br2);
+    NodeValuePerCell<Rd> Fjr2   = this->_computeFjr(mesh2, Ajr2, ur2, u2, sigma2);
+    NodeValue<Rd> CR_ur         = this->_computeUr(mesh2, Ar2, br2);
+    NodeValuePerCell<Rd> CR_Fjr = this->_computeFjr(mesh2, Ajr2, ur2, u2, sigma2);
 
     return std::make_tuple(std::make_shared<const ItemValueVariant>(ur1),
                            std::make_shared<const SubItemValuePerItemVariant>(Fjr1),
-			   std::make_shared<const ItemValueVariant>(ur2),
-                           std::make_shared<const SubItemValuePerItemVariant>(Fjr2),
-			   CR_ur,
-			   CR_Fjr);
+                           std::make_shared<const ItemValueVariant>(ur2),
+                           std::make_shared<const SubItemValuePerItemVariant>(Fjr2), CR_ur, CR_Fjr);
   }
 
-   std::tuple<const std::shared_ptr<const ItemValueVariant>,const std::shared_ptr<const SubItemValuePerItemVariant>>
+  std::tuple<const std::shared_ptr<const ItemValueVariant>, const std::shared_ptr<const SubItemValuePerItemVariant>>
   compute_fluxes(const SolverType& solver_type,
                  const std::shared_ptr<const DiscreteFunctionVariant>& rho_v,
                  const std::shared_ptr<const DiscreteFunctionVariant>& aL_v,
@@ -571,9 +572,9 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
                  const std::shared_ptr<const DiscreteFunctionVariant>& u_v,
                  const std::shared_ptr<const DiscreteFunctionVariant>& sigma_v,
                  const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list,
-		 NodeValue<Rd> CR_ur,
-		 NodeValuePerCell<Rd> CR_Fjr,
-		 const std::vector<NodeId> map2) const
+                 NodeValue<Rd> CR_ur,
+                 NodeValuePerCell<Rd> CR_Fjr,
+                 const std::vector<NodeId> map2) const
   {
     std::shared_ptr i_mesh = getCommonMesh({rho_v, aL_v, aT_v, u_v, sigma_v});
     if (not i_mesh) {
@@ -605,7 +606,7 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
     NodeValue<Rd> ur         = this->_computeUr(mesh, Ar, br);
     NodeValuePerCell<Rd> Fjr = this->_computeFjr(mesh, Ajr, ur, u, sigma);
 
-    this->_applyCouplingBC(mesh,ur,CR_ur,Fjr,CR_Fjr,map2);
+    this->_applyCouplingBC(mesh, ur, CR_ur, Fjr, CR_Fjr, map2);
 
     return std::make_tuple(std::make_shared<const ItemValueVariant>(ur),
                            std::make_shared<const SubItemValuePerItemVariant>(Fjr));
@@ -713,27 +714,27 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
   }
 
   std::tuple<std::shared_ptr<const IMesh>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>>
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>>
   mesh_correction(const MeshType& mesh1,
-		  const MeshType& mesh2,
-		  const DiscreteScalarFunction& rho,
-		  const DiscreteVectorFunction& u,
-		  const DiscreteScalarFunction& E,
-		  const DiscreteTensorFunction& CG,
-		  std::vector<NodeId>& map1,
-		  std::vector<NodeId>& map2) const
-  { 
+                  const MeshType& mesh2,
+                  const DiscreteScalarFunction& rho,
+                  const DiscreteVectorFunction& u,
+                  const DiscreteScalarFunction& E,
+                  const DiscreteTensorFunction& CG,
+                  std::vector<NodeId>& map1,
+                  std::vector<NodeId>& map2) const
+  {
     NodeValue<Rd> xr1     = copy(mesh1.xr());
     NodeValue<Rd> new_xr2 = copy(mesh2.xr());
 
     size_t n = map1.size();
 
-    for(size_t i = 0; i<n; i++){
-      for(size_t j = 0; j<Dimension; j++){
-	new_xr2[map2[i]][j] = xr1[map1[i]][j];
+    for (size_t i = 0; i < n; i++) {
+      for (size_t j = 0; j < Dimension; j++) {
+        new_xr2[map2[i]][j] = xr1[map1[i]][j];
       }
     }
 
@@ -744,35 +745,29 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
     CellValue<double> new_E   = copy(E.cellValues());
     CellValue<Rdxd> new_CG    = copy(CG.cellValues());
 
-    return {new_mesh2,std::make_shared<DiscreteFunctionVariant>(DiscreteScalarFunction(new_mesh2, new_rho)),
+    return {new_mesh2, std::make_shared<DiscreteFunctionVariant>(DiscreteScalarFunction(new_mesh2, new_rho)),
             std::make_shared<DiscreteFunctionVariant>(DiscreteVectorFunction(new_mesh2, new_u)),
             std::make_shared<DiscreteFunctionVariant>(DiscreteScalarFunction(new_mesh2, new_E)),
-	    std::make_shared<DiscreteFunctionVariant>(DiscreteTensorFunction(new_mesh2,new_CG))};
+            std::make_shared<DiscreteFunctionVariant>(DiscreteTensorFunction(new_mesh2, new_CG))};
   }
 
   std::tuple<std::shared_ptr<const IMesh>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>>
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>>
   mesh_correction(const std::shared_ptr<const IMesh>& i_mesh1,
-		  const std::shared_ptr<const IMesh>& i_mesh2,
-		  const std::shared_ptr<const DiscreteFunctionVariant>& rho,
-		  const std::shared_ptr<const DiscreteFunctionVariant>& u,
-		  const std::shared_ptr<const DiscreteFunctionVariant>& E,
-		  const std::shared_ptr<const DiscreteFunctionVariant>& CG,
-		  std::vector<NodeId>& map1,
-		  std::vector<NodeId>& map2) const
+                  const std::shared_ptr<const IMesh>& i_mesh2,
+                  const std::shared_ptr<const DiscreteFunctionVariant>& rho,
+                  const std::shared_ptr<const DiscreteFunctionVariant>& u,
+                  const std::shared_ptr<const DiscreteFunctionVariant>& E,
+                  const std::shared_ptr<const DiscreteFunctionVariant>& CG,
+                  std::vector<NodeId>& map1,
+                  std::vector<NodeId>& map2) const
   {
-
-    return this->mesh_correction(dynamic_cast<const MeshType&>(*i_mesh1),
-				 dynamic_cast<const MeshType&>(*i_mesh2),
-				 rho->get<DiscreteScalarFunction>(),
-				 u->get<DiscreteVectorFunction>(),
-				 E->get<DiscreteScalarFunction>(),
-				 CG->get<DiscreteTensorFunction>(),
-				 map1,
-				 map2);
+    return this->mesh_correction(dynamic_cast<const MeshType&>(*i_mesh1), dynamic_cast<const MeshType&>(*i_mesh2),
+                                 rho->get<DiscreteScalarFunction>(), u->get<DiscreteVectorFunction>(),
+                                 E->get<DiscreteScalarFunction>(), CG->get<DiscreteTensorFunction>(), map1, map2);
   }
 
   std::tuple<std::shared_ptr<const IMesh>,
@@ -780,32 +775,32 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
              std::shared_ptr<const DiscreteFunctionVariant>,
              std::shared_ptr<const DiscreteFunctionVariant>,
              std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const IMesh>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>,
-	     std::shared_ptr<const DiscreteFunctionVariant>>
+             std::shared_ptr<const IMesh>,
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>,
+             std::shared_ptr<const DiscreteFunctionVariant>>
   apply(const SolverType& solver_type,
         const double& dt1,
-	const size_t& q,
+        const size_t& q,
         const std::shared_ptr<const DiscreteFunctionVariant>& rho1,
-	const std::shared_ptr<const DiscreteFunctionVariant>& rho2,
+        const std::shared_ptr<const DiscreteFunctionVariant>& rho2,
         const std::shared_ptr<const DiscreteFunctionVariant>& u1,
-	const std::shared_ptr<const DiscreteFunctionVariant>& u2,
+        const std::shared_ptr<const DiscreteFunctionVariant>& u2,
         const std::shared_ptr<const DiscreteFunctionVariant>& E1,
-	const std::shared_ptr<const DiscreteFunctionVariant>& E2,
+        const std::shared_ptr<const DiscreteFunctionVariant>& E2,
         const std::shared_ptr<const DiscreteFunctionVariant>& CG1,
-	const std::shared_ptr<const DiscreteFunctionVariant>& CG2,
+        const std::shared_ptr<const DiscreteFunctionVariant>& CG2,
         const std::shared_ptr<const DiscreteFunctionVariant>& aL1,
-	const std::shared_ptr<const DiscreteFunctionVariant>& aL2,
+        const std::shared_ptr<const DiscreteFunctionVariant>& aL2,
         const std::shared_ptr<const DiscreteFunctionVariant>& aT1,
-	const std::shared_ptr<const DiscreteFunctionVariant>& aT2,
+        const std::shared_ptr<const DiscreteFunctionVariant>& aT2,
         const std::shared_ptr<const DiscreteFunctionVariant>& sigma1,
-	const std::shared_ptr<const DiscreteFunctionVariant>& sigma2,
+        const std::shared_ptr<const DiscreteFunctionVariant>& sigma2,
         const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list1,
-	const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list2,
-	const double& mu,
-	const double& lambda) const
+        const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list2,
+        const double& mu,
+        const double& lambda) const
   {
     std::shared_ptr<const IMesh> new_m2 = getCommonMesh({rho2, aL2, aT2, u2, sigma2});
     std::shared_ptr<const IMesh> m1     = getCommonMesh({rho1, aL1, aT1, u1, sigma1});
@@ -815,63 +810,73 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver final : public
     std::shared_ptr<const DiscreteFunctionVariant> new_E2   = E2;
     std::shared_ptr<const DiscreteFunctionVariant> new_CG2  = CG2;
 
-    auto [map1,map2] = _computeMapping(m1,new_m2,bc_descriptor_list1,bc_descriptor_list2);
-    
-    auto [ur1, Fjr1, ur2, Fjr2, CR_ur, CR_Fjr] = compute_fluxes(solver_type, rho1, aL1, aT1, u1, sigma1, bc_descriptor_list1, rho2, aL2, aT2, u2, sigma2, bc_descriptor_list2, map1, map2);
-    const auto [new_m1,new_rho1,new_u1,new_E1,new_CG1] = apply_fluxes(dt1, rho1, u1, E1, CG1, ur1, Fjr1);
+    auto [map1, map2] = _computeMapping(m1, new_m2, bc_descriptor_list1, bc_descriptor_list2);
 
-    double dt2 = dt1/q;
-    const double gamma = 1.4;
+    auto [ur1, Fjr1, ur2, Fjr2, CR_ur, CR_Fjr] =
+      compute_fluxes(solver_type, rho1, aL1, aT1, u1, sigma1, bc_descriptor_list1, rho2, aL2, aT2, u2, sigma2,
+                     bc_descriptor_list2, map1, map2);
+    const auto [new_m1, new_rho1, new_u1, new_E1, new_CG1] = apply_fluxes(dt1, rho1, u1, E1, CG1, ur1, Fjr1);
+
+    double dt2                    = dt1 / q;
+    const double gamma            = 1.4;
     const TinyMatrix<Dimension> I = identity;
-    double sum_dt = 0;
-    
+    double sum_dt                 = 0;
+
     size_t fluid = 0;
-    if((mu == 0) and (lambda == 0)){
+    if ((mu == 0) and (lambda == 0)) {
       fluid = 1;
     }
 
-    for(size_t i = 0; i<q; i++){
-      
-      if(i == q-1){
-	dt2 = dt1 - sum_dt;
+    for (size_t i = 0; i < q; i++) {
+      if (i == q - 1) {
+        dt2 = dt1 - sum_dt;
       }
 
-      const DiscreteScalarFunction& rho_d   = new_rho2->get<DiscreteScalarFunction>();
-      const DiscreteVectorFunction& u_d     = new_u2->get<DiscreteVectorFunction>();
-      const DiscreteScalarFunction& E_d     = new_E2->get<DiscreteScalarFunction>();
-      const DiscreteScalarFunction& eps     = E_d - 0.5 * dot(u_d,u_d);
-      const DiscreteTensorFunction& CG_d    = new_CG2->get<DiscreteTensorFunction>();
-      const DiscreteScalarFunction& p = fluid*(gamma - 1)*rho_d*eps;
-      const DiscreteTensorFunction& sigma_d = mu/sqrt(det(CG_d))* (CG_d - I) + lambda/sqrt(det(CG_d)) * log(sqrt(det(CG_d))) * I - p * I;
-      const DiscreteScalarFunction& aL_d = sqrt(lambda+2*mu/rho_d + gamma * p / rho_d);
-      const DiscreteScalarFunction& aT_d = sqrt(mu/rho_d);
+      const DiscreteScalarFunction& rho_d = new_rho2->get<DiscreteScalarFunction>();
+      const DiscreteVectorFunction& u_d   = new_u2->get<DiscreteVectorFunction>();
+      const DiscreteScalarFunction& E_d   = new_E2->get<DiscreteScalarFunction>();
+      const DiscreteScalarFunction& eps   = E_d - 0.5 * dot(u_d, u_d);
+      const DiscreteTensorFunction& CG_d  = new_CG2->get<DiscreteTensorFunction>();
+      const DiscreteScalarFunction& p = fluid * (gamma - 1) * rho_d * eps;
+      const DiscreteTensorFunction& sigma_d =
+        mu / sqrt(det(CG_d)) * (CG_d - I) + lambda / sqrt(det(CG_d)) * log(sqrt(det(CG_d))) * I - p * I;
+      const DiscreteScalarFunction& aL_d = sqrt((lambda + 2 * mu) / rho_d + gamma * p / rho_d);
 
-      const std::shared_ptr<const DiscreteFunctionVariant>& new_sigma2 = std::make_shared<const DiscreteFunctionVariant>(sigma_d);
-      const std::shared_ptr<const DiscreteFunctionVariant>& new_aL2 = std::make_shared<const DiscreteFunctionVariant>(aL_d);
-      const std::shared_ptr<const DiscreteFunctionVariant>& new_aT2 = std::make_shared<const DiscreteFunctionVariant>(aT_d);
+      const DiscreteScalarFunction& aT_d = sqrt(mu / rho_d);
 
-      auto [ur2,Fjr2] = compute_fluxes(solver_type,new_rho2,new_aL2,new_aT2,new_u2,new_sigma2,bc_descriptor_list2,CR_ur,CR_Fjr,map2);
-	
-      std::tie(new_m2,new_rho2,new_u2,new_E2,new_CG2) = apply_fluxes(dt2,new_rho2,new_u2,new_E2,new_CG2,ur2,Fjr2);
+      const std::shared_ptr<const DiscreteFunctionVariant>& new_sigma2 =
+        std::make_shared<const DiscreteFunctionVariant>(sigma_d);
+      const std::shared_ptr<const DiscreteFunctionVariant>& new_aL2 =
+        std::make_shared<const DiscreteFunctionVariant>(aL_d);
+      const std::shared_ptr<const DiscreteFunctionVariant>& new_aT2 =
+        std::make_shared<const DiscreteFunctionVariant>(aT_d);
+
+      auto [ur2, Fjr2] = compute_fluxes(solver_type, new_rho2, new_aL2, new_aT2, new_u2, new_sigma2,
+                                        bc_descriptor_list2, CR_ur, CR_Fjr, map2);
+
+      std::tie(new_m2, new_rho2, new_u2, new_E2, new_CG2) =
+        apply_fluxes(dt2, new_rho2, new_u2, new_E2, new_CG2, ur2, Fjr2);
 
       sum_dt += dt2;
     }
 
-    std::tie(new_m2,new_rho2,new_u2,new_E2,new_CG2) = mesh_correction(new_m1,new_m2,new_rho2,new_u2,new_E2,new_CG2,map1,map2);
+    std::tie(new_m2, new_rho2, new_u2, new_E2, new_CG2) =
+      mesh_correction(new_m1, new_m2, new_rho2, new_u2, new_E2, new_CG2, map1, map2);
 
-      return {new_m1,new_rho1,new_u1,new_E1,new_CG1,new_m2,new_rho2,new_u2,new_E2,new_CG2};
+    return {new_m1, new_rho1, new_u1, new_E1, new_CG1, new_m2, new_rho2, new_u2, new_E2, new_CG2};
   }
 
-  LocalDtHyperelasticSolver()                     = default;
+  LocalDtHyperelasticSolver()                            = default;
   LocalDtHyperelasticSolver(LocalDtHyperelasticSolver&&) = default;
-  ~LocalDtHyperelasticSolver()                    = default;
+  ~LocalDtHyperelasticSolver()                           = default;
 };
 
 template <size_t Dimension>
 void
- LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolver<Dimension>::_applyPressureBC(const BoundaryConditionList& bc_list,
-                                                                           const MeshType& mesh,
-                                                                           NodeValue<Rd>& br) const
+LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applyPressureBC(
+  const BoundaryConditionList& bc_list,
+  const MeshType& mesh,
+  NodeValue<Rd>& br) const
 {
   for (const auto& boundary_condition : bc_list) {
     std::visit(
@@ -934,9 +939,10 @@ void
 
 template <size_t Dimension>
 void
- LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolver<Dimension>::_applyNormalStressBC(const BoundaryConditionList& bc_list,
-                                                                               const MeshType& mesh,
-                                                                               NodeValue<Rd>& br) const
+LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applyNormalStressBC(
+  const BoundaryConditionList& bc_list,
+  const MeshType& mesh,
+  NodeValue<Rd>& br) const
 {
   for (const auto& boundary_condition : bc_list) {
     std::visit(
@@ -999,9 +1005,10 @@ void
 
 template <size_t Dimension>
 void
- LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolver<Dimension>::_applySymmetryBC(const BoundaryConditionList& bc_list,
-                                                                           NodeValue<Rdxd>& Ar,
-                                                                           NodeValue<Rd>& br) const
+LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applySymmetryBC(
+  const BoundaryConditionList& bc_list,
+  NodeValue<Rdxd>& Ar,
+  NodeValue<Rd>& br) const
 {
   for (const auto& boundary_condition : bc_list) {
     std::visit(
@@ -1030,9 +1037,10 @@ void
 
 template <size_t Dimension>
 void
- LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolver<Dimension>::_applyVelocityBC(const BoundaryConditionList& bc_list,
-                                                                           NodeValue<Rdxd>& Ar,
-                                                                           NodeValue<Rd>& br) const
+LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applyVelocityBC(
+  const BoundaryConditionList& bc_list,
+  NodeValue<Rdxd>& Ar,
+  NodeValue<Rd>& br) const
 {
   for (const auto& boundary_condition : bc_list) {
     std::visit(
@@ -1066,17 +1074,18 @@ void
 }
 
 template <size_t Dimension>
-void LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applyCouplingBC(NodeValue<Rdxd>& Ar1,
-											      NodeValue<Rdxd>& Ar2,
-											      NodeValue<Rd>& br1,
-											      NodeValue<Rd>& br2,
-											      const std::vector<NodeId>& map1,
-											      const std::vector<NodeId>& map2) const
+void
+LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applyCouplingBC(
+  NodeValue<Rdxd>& Ar1,
+  NodeValue<Rdxd>& Ar2,
+  NodeValue<Rd>& br1,
+  NodeValue<Rd>& br2,
+  const std::vector<NodeId>& map1,
+  const std::vector<NodeId>& map2) const
 {
   size_t n = map1.size();
 
-  for(size_t i = 0; i<n; i++){
-
+  for (size_t i = 0; i < n; i++) {
     NodeId node_id1 = map1[i];
     NodeId node_id2 = map2[i];
 
@@ -1085,33 +1094,33 @@ void LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_ap
 
     br1[node_id1] += br2[node_id2];
     br2[node_id2] = br1[node_id1];
-    
   }
 }
 
 template <size_t Dimension>
-void LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applyCouplingBC(const MeshType& mesh,
- 										      NodeValue<Rd>& ur,
- 										      NodeValue<Rd>& CR_ur,
- 										      NodeValuePerCell<Rd>& Fjr,
-										      NodeValuePerCell<Rd>& CR_Fjr,
-										      const std::vector<NodeId>& map2) const
+void
+LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::_applyCouplingBC(
+  const MeshType& mesh,
+  NodeValue<Rd>& ur,
+  NodeValue<Rd>& CR_ur,
+  NodeValuePerCell<Rd>& Fjr,
+  NodeValuePerCell<Rd>& CR_Fjr,
+  const std::vector<NodeId>& map2) const
 {
   const size_t& n = map2.size();
 
   const auto& node_to_cell_matrix               = mesh.connectivity().nodeToCellMatrix();
   const auto& node_local_numbers_in_their_cells = mesh.connectivity().nodeLocalNumbersInTheirCells();
 
-  for(size_t i = 0; i<n; i++){
-    
+  for (size_t i = 0; i < n; i++) {
     const NodeId node_id                       = map2[i];
     const auto& node_to_cell                   = node_to_cell_matrix[node_id];
     const auto& node_local_number_in_its_cells = node_local_numbers_in_their_cells.itemArray(node_id);
 
-    for(size_t j = 0; j < node_to_cell.size(); j++){
+    for (size_t j = 0; j < node_to_cell.size(); j++) {
       const CellId J       = node_to_cell[j];
       const unsigned int R = node_local_number_in_its_cells[j];
-      Fjr(J,R)             = CR_Fjr(J,R);
+      Fjr(J, R)            = CR_Fjr(J, R);
     }
     ur[node_id] = CR_ur[node_id];
   }
@@ -1138,7 +1147,7 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::Fi
 };
 
 template <size_t Dimension>
-class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::PressureBoundaryCondition
+class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::PressureBoundaryCondition
 {
  private:
   const MeshFaceBoundary<Dimension> m_mesh_face_boundary;
@@ -1166,7 +1175,7 @@ class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::P
 };
 
 template <>
-class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<1>::PressureBoundaryCondition
+class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<1>::PressureBoundaryCondition
 {
  private:
   const MeshNodeBoundary<1> m_mesh_node_boundary;
@@ -1193,7 +1202,7 @@ class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<1>::PressureB
 };
 
 template <size_t Dimension>
-class  LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolver<Dimension>::NormalStressBoundaryCondition
+class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::NormalStressBoundaryCondition
 {
  private:
   const MeshFaceBoundary<Dimension> m_mesh_face_boundary;
@@ -1221,7 +1230,7 @@ class  LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolver<Dimension>::
 };
 
 template <>
-class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<1>::NormalStressBoundaryCondition
+class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<1>::NormalStressBoundaryCondition
 {
  private:
   const MeshNodeBoundary<1> m_mesh_node_boundary;
@@ -1248,7 +1257,7 @@ class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<1>::NormalStr
 };
 
 template <size_t Dimension>
-class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::VelocityBoundaryCondition
+class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::VelocityBoundaryCondition
 {
  private:
   const MeshNodeBoundary<Dimension> m_mesh_node_boundary;
@@ -1277,7 +1286,7 @@ class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::V
 };
 
 template <size_t Dimension>
-class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::SymmetryBoundaryCondition
+class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::SymmetryBoundaryCondition
 {
  public:
   using Rd = TinyVector<Dimension, double>;
@@ -1316,7 +1325,7 @@ class  LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::S
 template <size_t Dimension>
 class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::CouplingBoundaryCondition
 {
-  private:
+ private:
   const MeshNodeBoundary<Dimension> m_mesh_node_boundary;
   const size_t m_label;
 
@@ -1328,21 +1337,22 @@ class LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolver<Dimension>::Co
   }
 
   size_t
-  label() const {
+  label() const
+  {
     return m_label;
   }
-  
-  CouplingBoundaryCondition(const MeshNodeBoundary<Dimension>& mesh_node_boundary,const size_t label)
+
+  CouplingBoundaryCondition(const MeshNodeBoundary<Dimension>& mesh_node_boundary, const size_t label)
     : m_mesh_node_boundary{mesh_node_boundary}, m_label{label}
   {
     ;
   }
 
   ~CouplingBoundaryCondition() = default;
-  
-}; 
+};
 
-LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolverHandler(const std::shared_ptr<const IMesh>& i_mesh1, const std::shared_ptr<const IMesh>& i_mesh2)
+LocalDtHyperelasticSolverHandler::LocalDtHyperelasticSolverHandler(const std::shared_ptr<const IMesh>& i_mesh1,
+                                                                   const std::shared_ptr<const IMesh>& i_mesh2)
 {
   if (not i_mesh1) {
     throw NormalError("mesh1 not defined");
@@ -1352,7 +1362,7 @@ LocalDtHyperelasticSolverHandler:: LocalDtHyperelasticSolverHandler(const std::s
     throw NormalError("mesh2 not defined");
   }
 
-  if (not (i_mesh1->dimension()==i_mesh2->dimension())) {
+  if (not(i_mesh1->dimension() == i_mesh2->dimension())) {
     throw NormalError("mesh1 and mesh2 must have the same dimension");
   }