diff --git a/src/model/contact_mechanics/contact_mechanics_model.cc b/src/model/contact_mechanics/contact_mechanics_model.cc
index 47ae3a016..7c245b0cd 100644
--- a/src/model/contact_mechanics/contact_mechanics_model.cc
+++ b/src/model/contact_mechanics/contact_mechanics_model.cc
@@ -1,680 +1,681 @@
 /**
  * @file   coontact_mechanics_model.cc
  *
  * @author Mohit Pundir <mohit.pundir@epfl.ch>
  *
  * @date creation: Tue May 08 2012
  * @date last modification: Wed Feb 21 2018
  *
  * @brief  Contact mechanics model
  *
  * @section LICENSE
  *
  * Copyright (©)  2010-2018 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 #include "contact_mechanics_model.hh"
 #include "boundary_condition_functor.hh"
 #include "dumpable_inline_impl.hh"
 #include "integrator_gauss.hh"
 #include "shape_lagrange.hh"
-#include "group_manager_inline_impl.cc"
+#include "group_manager_inline_impl.hh"
+
 #ifdef AKANTU_USE_IOHELPER
 #include "dumper_iohelper_paraview.hh"
 #endif
 
 /* -------------------------------------------------------------------------- */
 #include <algorithm>
 /* -------------------------------------------------------------------------- */
 
 namespace akantu {
 
 /* -------------------------------------------------------------------------- */
 ContactMechanicsModel::ContactMechanicsModel(
     Mesh & mesh, UInt dim, const ID & id, const MemoryID & memory_id,
     std::shared_ptr<DOFManager> dof_manager, const ModelType model_type)
     : Model(mesh, model_type, dof_manager, dim, id, memory_id) {
 
   AKANTU_DEBUG_IN();
 
   this->registerFEEngineObject<MyFEEngineType>("ContactMechanicsModel", mesh,
                                                Model::spatial_dimension);
 #if defined(AKANTU_USE_IOHELPER)
   this->mesh.registerDumper<DumperParaview>("contact_mechanics", id, true);
   this->mesh.addDumpMeshToDumper("contact_mechanics", mesh,
                                  Model::spatial_dimension, _not_ghost,
                                  _ek_regular);
 #endif
 
   this->registerDataAccessor(*this);
 
   this->detector =
       std::make_unique<ContactDetector>(this->mesh, id + ":contact_detector");
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 ContactMechanicsModel::~ContactMechanicsModel() {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::initFullImpl(const ModelOptions & options) {
 
   Model::initFullImpl(options);
 
   // initalize the resolutions
   if (this->parser.getLastParsedFile() != "") {
     this->instantiateResolutions();
   }
 
   this->initResolutions();
 
   this->initBC(*this, *displacement, *displacement_increment, *external_force);
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::instantiateResolutions() {
   ParserSection model_section;
   bool is_empty;
   std::tie(model_section, is_empty) = this->getParserSection();
 
   if (not is_empty) {
     auto model_resolutions =
         model_section.getSubSections(ParserType::_contact_resolution);
     for (const auto & section : model_resolutions) {
       this->registerNewResolution(section);
     }
   }
 
   auto sub_sections =
       this->parser.getSubSections(ParserType::_contact_resolution);
   for (const auto & section : sub_sections) {
     this->registerNewResolution(section);
   }
 
   if (resolutions.empty())
     AKANTU_EXCEPTION("No contact resolutions where instantiated for the model"
                      << getID());
   are_resolutions_instantiated = true;
 }
 
 /* -------------------------------------------------------------------------- */
 Resolution &
 ContactMechanicsModel::registerNewResolution(const ParserSection & section) {
   std::string res_name;
   std::string res_type = section.getName();
   std::string opt_param = section.getOption();
 
   try {
     std::string tmp = section.getParameter("name");
     res_name = tmp; /** this can seem weird, but there is an ambiguous operator
                      * overload that i couldn't solve. @todo remove the
                      * weirdness of this code
                      */
   } catch (debug::Exception &) {
     AKANTU_ERROR("A contact resolution of type \'"
                  << res_type
                  << "\' in the input file has been defined without a name!");
   }
   Resolution & res = this->registerNewResolution(res_name, res_type, opt_param);
 
   res.parseSection(section);
 
   return res;
 }
 
 /* -------------------------------------------------------------------------- */
 Resolution & ContactMechanicsModel::registerNewResolution(
     const ID & res_name, const ID & res_type, const ID & opt_param) {
   AKANTU_DEBUG_ASSERT(resolutions_names_to_id.find(res_name) ==
                           resolutions_names_to_id.end(),
                       "A resolution with this name '"
                           << res_name << "' has already been registered. "
                           << "Please use unique names for resolutions");
 
   UInt res_count = resolutions.size();
   resolutions_names_to_id[res_name] = res_count;
 
   std::stringstream sstr_res;
   sstr_res << this->id << ":" << res_count << ":" << res_type;
   ID res_id = sstr_res.str();
 
   std::unique_ptr<Resolution> resolution =
       ResolutionFactory::getInstance().allocate(res_type, spatial_dimension,
                                                 opt_param, *this, res_id);
 
   resolutions.push_back(std::move(resolution));
 
   return *(resolutions.back());
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::initResolutions() {
   AKANTU_DEBUG_ASSERT(resolutions.size() != 0,
                       "No resolutions to initialize !");
 
   if (!are_resolutions_instantiated)
     instantiateResolutions();
 
   // \TODO check if each resolution needs a initResolution() method
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::initModel() {
   getFEEngine().initShapeFunctions(_not_ghost);
   getFEEngine().initShapeFunctions(_ghost);
 }
 
 /* -------------------------------------------------------------------------- */
 FEEngine & ContactMechanicsModel::getFEEngineBoundary(const ID & name) {
   return dynamic_cast<FEEngine &>(
       getFEEngineClassBoundary<MyFEEngineType>(name));
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::initSolver(
     TimeStepSolverType /*time_step_solver_type*/, NonLinearSolverType) {
 
   // for alloc type of solvers
   this->allocNodalField(this->displacement, spatial_dimension, "displacement");
   this->allocNodalField(this->displacement_increment, spatial_dimension,
                         "displacement_increment");
   this->allocNodalField(this->internal_force, spatial_dimension,
                         "internal_force");
   this->allocNodalField(this->external_force, spatial_dimension,
                         "external_force");
   this->allocNodalField(this->normal_force, spatial_dimension,
 			"normal_force");
   this->allocNodalField(this->tangential_force, spatial_dimension,
 			"tangential_force");
   
   this->allocNodalField(this->gaps, 1, "gaps");
   this->allocNodalField(this->nodal_area, 1, "areas");
   this->allocNodalField(this->blocked_dofs, 1, "blocked_dofs");
   this->allocNodalField(this->stick_or_slip, 1, "stick_or_slip");
   this->allocNodalField(this->previous_master_elements, 1, "previous_master_elements");
   
   this->allocNodalField(this->normals, spatial_dimension, "normals");
 
   auto surface_dimension = spatial_dimension - 1;
   this->allocNodalField(this->tangents, surface_dimension*spatial_dimension,
 			"tangents");
   this->allocNodalField(this->previous_tangents, surface_dimension*spatial_dimension,
 			"previous_tangents");
   this->allocNodalField(this->projections, surface_dimension,
 			"projections");
   this->allocNodalField(this->previous_projections, surface_dimension,
 			"previous_projections");
   this->allocNodalField(this->stick_projections, surface_dimension,
 			"stick_projections");
   this->allocNodalField(this->tangential_tractions, surface_dimension,
 			"tangential_tractions");
   this->allocNodalField(this->previous_tangential_tractions, surface_dimension,
 			"previous_tangential_tractions");
     
   // todo register multipliers as dofs for lagrange multipliers
 }
 
 /* -------------------------------------------------------------------------- */
 std::tuple<ID, TimeStepSolverType>
 ContactMechanicsModel::getDefaultSolverID(const AnalysisMethod & method) {
 
   switch (method) {
   case _explicit_lumped_mass: {
     return std::make_tuple("explicit_lumped",
                            TimeStepSolverType::_dynamic_lumped);
   }
   case _explicit_consistent_mass: {
     return std::make_tuple("explicit", TimeStepSolverType::_dynamic);
   }
   case _static: {
     return std::make_tuple("static", TimeStepSolverType::_static);
   }
   case _implicit_dynamic: {
     return std::make_tuple("implicit", TimeStepSolverType::_dynamic);
   }
   default:
     return std::make_tuple("unknown", TimeStepSolverType::_not_defined);
   }
 }
 
 /* -------------------------------------------------------------------------- */
 ModelSolverOptions ContactMechanicsModel::getDefaultSolverOptions(
     const TimeStepSolverType & type) const {
   ModelSolverOptions options;
 
   switch (type) {
   case TimeStepSolverType::_dynamic: {
     options.non_linear_solver_type = NonLinearSolverType::_lumped;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_central_difference;
     options.solution_type["displacement"] = IntegrationScheme::_acceleration;
     break;
   }
   case TimeStepSolverType::_dynamic_lumped: {
     options.non_linear_solver_type = NonLinearSolverType::_lumped;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_central_difference;
     options.solution_type["displacement"] = IntegrationScheme::_acceleration;
     break;
   }
   case TimeStepSolverType::_static: {
     options.non_linear_solver_type =
         NonLinearSolverType::_newton_raphson_contact;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_pseudo_time;
     options.solution_type["displacement"] = IntegrationScheme::_not_defined;
     break;
   }
   default:
     AKANTU_EXCEPTION(type << " is not a valid time step solver type");
     break;
   }
 
   return options;
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::assembleResidual() {
   AKANTU_DEBUG_IN();
 
   /* ------------------------------------------------------------------------ */
   // computes the internal forces
   this->assembleInternalForces();
 
   /* ------------------------------------------------------------------------ */
   this->getDOFManager().assembleToResidual("displacement",
                                            *this->internal_force, 1);
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::assembleInternalForces() {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_INFO("Assemble the contact forces");
 
   UInt nb_nodes = mesh.getNbNodes();
   this->internal_force->clear();
   this->normal_force->clear();
   this->tangential_force->clear();
 
   internal_force->resize(nb_nodes, 0.);
   normal_force->resize(nb_nodes, 0.);
   tangential_force->resize(nb_nodes, 0.);
 
   // assemble the forces due to contact
   auto assemble = [&](auto && ghost_type) {
     for (auto & resolution : resolutions) {
       resolution->assembleInternalForces(ghost_type);
     }
   };
 
   AKANTU_DEBUG_INFO("Assemble residual for local elements");
   assemble(_not_ghost);
 
   // assemble the stresses due to ghost elements
   AKANTU_DEBUG_INFO("Assemble residual for ghost elements");
   assemble(_ghost);
 
   AKANTU_DEBUG_OUT();
 }
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::search() {
 
   // save the previous state 
   this->savePreviousState();
   
   contact_elements.clear();
   contact_elements.resize(0);
 
   // this needs to be resized if cohesive elements are added 
   UInt nb_nodes = mesh.getNbNodes();
 
   auto resize_arrays = [&](auto & internal_array) {
     internal_array->clear();
     internal_array->resize(nb_nodes, 0.);
   };
 
   resize_arrays(gaps);
   resize_arrays(normals);
   resize_arrays(tangents);
   resize_arrays(projections);
   resize_arrays(tangential_tractions);
     
   this->detector->search(contact_elements, *gaps,
 			 *normals, *projections);
   
   for (auto & gap : *gaps) {
     if (gap < 0)
       gap = std::abs(gap);
     else
       gap = -gap;
   }
 
   if (contact_elements.size() != 0) {
      this->computeNodalAreas();
   }
   
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::savePreviousState() {
 
   AKANTU_DEBUG_IN();
 
   // saving previous natural projections 
   previous_projections->clear();
   previous_projections->resize(projections->size(), 0.);
   (*previous_projections).copy(*projections);
 
   // saving previous tangents
   previous_tangents->clear();
   previous_tangents->resize(tangents->size(), 0.);
   (*previous_tangents).copy(*tangents);
 
   // saving previous tangential traction
   previous_tangential_tractions->clear();
   previous_tangential_tractions->resize(tangential_tractions->size(), 0.);
   (*previous_tangential_tractions).copy(*tangential_tractions);
 
   previous_master_elements->clear();
   previous_master_elements->resize(projections->size());
   for (auto & element : contact_elements) {
     (*previous_master_elements)[element.slave] = element.master;
   }
 
   AKANTU_DEBUG_OUT();
 }
 
   
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::computeNodalAreas() {
 
   UInt nb_nodes = mesh.getNbNodes();
 
   nodal_area->clear();
   external_force->clear();
 
   nodal_area->resize(nb_nodes, 0.);
   external_force->resize(nb_nodes, 0.);
 
   auto & fem_boundary = this->getFEEngineBoundary(); 
   fem_boundary.computeNormalsOnIntegrationPoints(_not_ghost);
   fem_boundary.computeNormalsOnIntegrationPoints(_ghost);
 
   // TODO find a better method to compute nodal area
   switch (spatial_dimension) {
   case 1: {
     for (auto && area : *nodal_area) {
       area = 1.;
     }
     break;
   }
   case 2:
   case 3: {
       this->applyBC(
       BC::Neumann::FromHigherDim(Matrix<Real>::eye(spatial_dimension, 1)),
       mesh.getElementGroup("contact_surface"));
 
       for (auto && tuple :
 	     zip(*nodal_area, make_view(*external_force, spatial_dimension))) {
 	auto & area = std::get<0>(tuple);
 	auto & force = std::get<1>(tuple);
 
 	for (auto & f : force)
 	  area += pow(f, 2);
 
 	area = sqrt(area);
       }
     break;
   }
   default:
     break;
   }
   
   this->external_force->clear();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::printself(std::ostream & stream, int indent) const {
   std::string space;
   for (Int i = 0; i < indent; i++, space += AKANTU_INDENT)
     ;
 
   stream << space << "Contact Mechanics Model [" << std::endl;
   stream << space << " + id                : " << id << std::endl;
   stream << space << " + spatial dimension : " << Model::spatial_dimension
          << std::endl;
   stream << space << " + fem [" << std::endl;
   getFEEngine().printself(stream, indent + 2);
   stream << space << AKANTU_INDENT << "]" << std::endl;
 
   stream << space << " + resolutions [" << std::endl;
   for (auto & resolution : resolutions) {
     resolution->printself(stream, indent + 1);
   }
   stream << space << AKANTU_INDENT << "]" << std::endl;
 
   stream << space << "]" << std::endl;
 }
 
 /* -------------------------------------------------------------------------- */
 MatrixType ContactMechanicsModel::getMatrixType(const ID & matrix_id) {
 
   if (matrix_id == "K")
     return _symmetric;
 
   return _mt_not_defined;
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::assembleMatrix(const ID & matrix_id) {
   if (matrix_id == "K") {
     this->assembleStiffnessMatrix();
   }
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::assembleStiffnessMatrix() {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_INFO("Assemble the new stiffness matrix");
 
   if (!this->getDOFManager().hasMatrix("K")) {
     this->getDOFManager().getNewMatrix("K", getMatrixType("K"));
   }
 
   for (auto & resolution : resolutions) {
     resolution->assembleStiffnessMatrix(_not_ghost);
   }
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::assembleLumpedMatrix(const ID & /*matrix_id*/) {
   AKANTU_TO_IMPLEMENT();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::beforeSolveStep() {
   for (auto & resolution : resolutions)
     resolution->beforeSolveStep();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::afterSolveStep(bool converged) {
   for (auto & resolution : resolutions)
     resolution->afterSolveStep(converged);
 }
   
 
 /* -------------------------------------------------------------------------- */
 #ifdef AKANTU_USE_IOHELPER
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 ContactMechanicsModel::createNodalFieldBool(const std::string &,
 					    const std::string &, bool) {
 
   return nullptr;
 }
 
   
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 ContactMechanicsModel::createNodalFieldReal(const std::string & field_name,
                                             const std::string & group_name,
                                             bool padding_flag) {
 
   std::map<std::string, Array<Real> *> real_nodal_fields;
   real_nodal_fields["contact_force"]    = this->internal_force;
   real_nodal_fields["normal_force"]     = this->normal_force;
   real_nodal_fields["tangential_force"] = this->tangential_force;
   real_nodal_fields["blocked_dofs"]     = this->blocked_dofs;
   real_nodal_fields["normals"]          = this->normals;
   real_nodal_fields["tangents"]         = this->tangents;
   real_nodal_fields["gaps"]             = this->gaps;
   real_nodal_fields["areas"]            = this->nodal_area;
   real_nodal_fields["stick_or_slip"]    = this->stick_or_slip;
 
-  std::shared_ptr<dumper::Field> field;
+  std::shared_ptr<dumpers::Field> field;
   if (padding_flag) 
     field = this->mesh.createNodalField(real_nodal_fields[field_name],
                                        group_name, 3);
   else
     field = this->mesh.createNodalField(real_nodal_fields[field_name],
                                        group_name); 
   return field;
 }
 
 #else
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 ContactMechanicsModel::createNodalFieldBool(const std::string &,
 					    const std::string &, bool) {
 
   return nullptr;
 }
 
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 ContactMechanicsModel::createNodalFieldReal(const std::string & ,
                                             const std::string & , bool) {
   return nullptr;
 }
 
 #endif
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::dump(const std::string & dumper_name) {
   mesh.dump(dumper_name);
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::dump(const std::string & dumper_name, UInt step) {
   mesh.dump(dumper_name, step);
 }
 
 /* ------------------------------------------------------------------------- */
 void ContactMechanicsModel::dump(const std::string & dumper_name, Real time,
                                  UInt step) {
   mesh.dump(dumper_name, time, step);
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::dump() { mesh.dump(); }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::dump(UInt step) { mesh.dump(step); }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::dump(Real time, UInt step) {
   mesh.dump(time, step);
 }
 
 /* -------------------------------------------------------------------------- */
 UInt ContactMechanicsModel::getNbData(
     const Array<Element> & elements, const SynchronizationTag & /*tag*/) const {
   AKANTU_DEBUG_IN();
 
   UInt size = 0;
   UInt nb_nodes_per_element = 0;
 
   for (const Element & el : elements) {
     nb_nodes_per_element += Mesh::getNbNodesPerElement(el.type);
   }
 
   AKANTU_DEBUG_OUT();
   return size;
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::packData(CommunicationBuffer & /*buffer*/,
                                      const Array<Element> & /*elements*/,
                                      const SynchronizationTag & /*tag*/) const {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::unpackData(CommunicationBuffer & /*buffer*/,
                                        const Array<Element> & /*elements*/,
                                        const SynchronizationTag & /*tag*/) {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 UInt ContactMechanicsModel::getNbData(
     const Array<UInt> & dofs, const SynchronizationTag & /*tag*/) const {
   AKANTU_DEBUG_IN();
 
   UInt size = 0;
 
   AKANTU_DEBUG_OUT();
   return size * dofs.size();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::packData(CommunicationBuffer & /*buffer*/,
                                      const Array<UInt> & /*dofs*/,
                                      const SynchronizationTag & /*tag*/) const {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void ContactMechanicsModel::unpackData(CommunicationBuffer & /*buffer*/,
                                        const Array<UInt> & /*dofs*/,
                                        const SynchronizationTag & /*tag*/) {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_OUT();
 }
 
 } // namespace akantu
diff --git a/src/model/contact_mechanics/contact_mechanics_model.hh b/src/model/contact_mechanics/contact_mechanics_model.hh
index 9ccbdd636..08e1c6c5c 100644
--- a/src/model/contact_mechanics/contact_mechanics_model.hh
+++ b/src/model/contact_mechanics/contact_mechanics_model.hh
@@ -1,386 +1,386 @@
 /**
  * @file   contact_mechanics_model.hh
  *
  * @author Mohit Pundir <mohit.pundir@epfl.ch>
  *
  * @date creation: Tue Jul 27 2010
  * @date last modification: Wed Feb 21 2018
  *
  * @brief  Model of Contact Mechanics
  *
  * @section LICENSE
  *
  * Copyright (©)  2010-2018 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 #include "boundary_condition.hh"
 #include "contact_detector.hh"
 #include "data_accessor.hh"
 #include "fe_engine.hh"
 #include "model.hh"
 /* -------------------------------------------------------------------------- */
 
 #ifndef __AKANTU_CONTACT_MECHANICS_MODEL_HH__
 #define __AKANTU_CONTACT_MECHANICS_MODEL_HH__
 
 namespace akantu {
 class Resolution;
 template <ElementKind kind, class IntegrationOrderFunctor>
 class IntegratorGauss;
 template <ElementKind kind> class ShapeLagrange;
 } // namespace akantu
 
 /* -------------------------------------------------------------------------- */
 namespace akantu {
 
 /* -------------------------------------------------------------------------- */
 class ContactMechanicsModel : public Model,
                               public DataAccessor<Element>,
                               public DataAccessor<UInt>,
                               public BoundaryCondition<ContactMechanicsModel> {
 
   /* ------------------------------------------------------------------------ */
   /* Constructors/Destructors                                                 */
   /* ------------------------------------------------------------------------ */
 
   using MyFEEngineType = FEEngineTemplate<IntegratorGauss, ShapeLagrange>;
 
 public:
   ContactMechanicsModel(
       Mesh & mesh, UInt spatial_dimension = _all_dimensions,
       const ID & id = "contact_mechanics_model", const MemoryID & memory_id = 0,
       std::shared_ptr<DOFManager> dof_manager = nullptr,
       const ModelType model_type = ModelType::_contact_mechanics_model);
 
   ~ContactMechanicsModel() override;
 
   /* ------------------------------------------------------------------------ */
   /* Methods                                                                  */
   /* ------------------------------------------------------------------------ */
 protected:
   /// initialize completely the model
   void initFullImpl(const ModelOptions & options) override;
 
   /// allocate all vectors
   void initSolver(TimeStepSolverType, NonLinearSolverType) override;
 
   /// initialize all internal arrays for resolutions
   void initResolutions();
 
   /// initialize the modelType
   void initModel() override;
 
   /// call back for the solver, computes the force residual
   void assembleResidual() override;
 
   /// get the type of matrix needed
   MatrixType getMatrixType(const ID & matrix_id) override;
 
   /// callback for the solver, this assembles different matrices
   void assembleMatrix(const ID & matrix_id) override;
 
   /// callback for the solver, this assembles the stiffness matrix
   void assembleLumpedMatrix(const ID & matrix_id) override;
 
   /// get some default values for derived classes
   std::tuple<ID, TimeStepSolverType>
   getDefaultSolverID(const AnalysisMethod & method) override;
 
   ModelSolverOptions
   getDefaultSolverOptions(const TimeStepSolverType & type) const;
 
   /// callback for the solver, this is called at beginning of solve
   void beforeSolveStep() override;
 
   /// callback for the solver, this is called at end of solve
   void afterSolveStep(bool converted = true) override;
 
   /// function to print the containt of the class
   void printself(std::ostream & stream, int indent = 0) const override;
 
   /* ------------------------------------------------------------------------ */
   /* Contact Detection                                                        */
   /* ------------------------------------------------------------------------ */
 public:
   void search();
 
   void computeNodalAreas();
 
   /* ------------------------------------------------------------------------ */
   /* Contact Resolution                                                       */
   /* ------------------------------------------------------------------------ */
 public:
   /// register an empty contact resolution of a given type
   Resolution & registerNewResolution(const ID & res_name, const ID & res_type,
                                      const ID & opt_param);
 
 protected:
   /// register a resolution in the dynamic database
   Resolution & registerNewResolution(const ParserSection & res_section);
 
   /// read the resolution files to instantiate all the resolutions
   void instantiateResolutions();
 
   /// save the parameters from previous state
   void savePreviousState();
 
   /* ------------------------------------------------------------------------ */
   /* Solver Interface                                                         */
   /* ------------------------------------------------------------------------ */
 public:
   /// assembles the contact stiffness matrix
   virtual void assembleStiffnessMatrix();
 
   /// assembles the contant internal forces
   virtual void assembleInternalForces();
 
   /* ------------------------------------------------------------------------ */
   /* Accessors                                                                */
   /* ------------------------------------------------------------------------ */
 public:
   FEEngine & getFEEngineBoundary(const ID & name = "") override;
 
   /* ------------------------------------------------------------------------ */
   /* Dumpable interface                                                       */
   /* ------------------------------------------------------------------------ */
 public:
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createNodalFieldReal(const std::string & field_name,
                        const std::string & group_name,
                        bool padding_flag) override;
 
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createNodalFieldBool(const std::string & field_name,
                        const std::string & group_name,
                        bool padding_flag) override;
   void dump() override;
 
   virtual void dump(UInt step);
 
   virtual void dump(Real time, UInt step);
 
   virtual void dump(const std::string & dumper_name);
 
   virtual void dump(const std::string & dumper_name, UInt step);
 
   virtual void dump(const std::string & dumper_name, Real time, UInt step);
 
   /* ------------------------------------------------------------------------ */
   /* Data Accessor inherited members                                          */
   /* ------------------------------------------------------------------------ */
 public:
   UInt getNbData(const Array<Element> & elements,
                  const SynchronizationTag & tag) const override;
 
   void packData(CommunicationBuffer & buffer, const Array<Element> & elements,
                 const SynchronizationTag & tag) const override;
 
   void unpackData(CommunicationBuffer & buffer, const Array<Element> & elements,
                   const SynchronizationTag & tag) override;
 
   UInt getNbData(const Array<UInt> & dofs,
                  const SynchronizationTag & tag) const override;
 
   void packData(CommunicationBuffer & buffer, const Array<UInt> & dofs,
                 const SynchronizationTag & tag) const override;
 
   void unpackData(CommunicationBuffer & buffer, const Array<UInt> & dofs,
                   const SynchronizationTag & tag) override;
 
 protected:
   /// contact detection class
   friend class ContactDetector;
 
   /// contact resolution class
   friend class Resolution;
 
   /* ------------------------------------------------------------------------ */
   /* Accessors                                                                */
   /* ------------------------------------------------------------------------ */
 public:
   /// return the dimension of the system space
   AKANTU_GET_MACRO(SpatialDimension, Model::spatial_dimension, UInt);
 
   /// get the ContactMechanicsModel::displacement vector
   AKANTU_GET_MACRO(Displacement, *displacement, Array<Real> &);
 
   /// get  the ContactMechanicsModel::increment  vector \warn  only  consistent
   /// if ContactMechanicsModel::setIncrementFlagOn has been called before
   AKANTU_GET_MACRO(Increment, *displacement_increment, Array<Real> &);
 
   /// get the ContactMechanics::internal_force vector (internal forces)
   AKANTU_GET_MACRO(InternalForce, *internal_force, Array<Real> &);
 
   /// get the ContactMechanicsModel::external_force vector (external forces)
   AKANTU_GET_MACRO(ExternalForce, *external_force, Array<Real> &);
 
   /// get the ContactMechanics::normal_force vector (normal forces)
   AKANTU_GET_MACRO(NormalForce, *normal_force, Array<Real> &);
 
   /// get the ContactMechanics::tangential_force vector (friction forces)
   AKANTU_GET_MACRO(TangentialForce, *tangential_force, Array<Real> &);
   
   /// get the ContactMechanics::traction vector (friction traction)
   AKANTU_GET_MACRO(TangentialTractions, *tangential_tractions, Array<Real> &);
 
   /// get the ContactMechanics::previous_tangential_tractions vector
   AKANTU_GET_MACRO(PreviousTangentialTractions, *previous_tangential_tractions,
 		   Array<Real> &);
 
   /// get the ContactMechanicsModel::force vector (external forces)
   Array<Real> & getForce() {
     AKANTU_DEBUG_WARNING("getForce was maintained for backward compatibility, "
                          "use getExternalForce instead");
     return *external_force;
   }
 
   /// get the ContactMechanics::blocked_dofs vector
   AKANTU_GET_MACRO(BlockedDOFs, *blocked_dofs, Array<Real> &);
 
   /// get the ContactMechanics::gaps (contact gaps)
   AKANTU_GET_MACRO(Gaps, *gaps, Array<Real> &);
 
   /// get the ContactMechanics::normals (normals on slave nodes)
   AKANTU_GET_MACRO(Normals, *normals, Array<Real> &);
 
   /// get the ContactMechanics::tangents (tangents on slave nodes)
   AKANTU_GET_MACRO(Tangents, *tangents, Array<Real> &);
 
   /// get the ContactMechanics::previous_tangents (tangents on slave nodes)
   AKANTU_GET_MACRO(PreviousTangents, *previous_tangents, Array<Real> &);
   
   /// get the ContactMechanics::areas (nodal areas)
   AKANTU_GET_MACRO(NodalArea, *nodal_area, Array<Real> &);
 
   /// get the ContactMechanics::stick_projections (stick_projections)
   AKANTU_GET_MACRO(StickProjections, *stick_projections, Array<Real> &);
 
   /// get the ContactMechanics::previous_projections (previous_projections)
   AKANTU_GET_MACRO(PreviousProjections, *previous_projections, Array<Real> &);
 
   /// get the ContactMechanics::projections (projections)
   AKANTU_GET_MACRO(Projections, *projections, Array<Real> &);
   
   /// get the ContactMechanics::stick_or_slip vector (slip/stick
   /// state)
   AKANTU_GET_MACRO(StickSlip, *stick_or_slip, Array<Real> &);
 
   /// get the ContactMechanics::previous_master_elements
   AKANTU_GET_MACRO(PreviousMasterElements, *previous_master_elements, Array<Element> &);
   
   /// get contact detector
   AKANTU_GET_MACRO_NOT_CONST(ContactDetector, *detector, ContactDetector &);
 
   /// get the contact elements
   inline Array<ContactElement> & getContactElements() {
     return contact_elements;
   }
 
   /// get the current positions of the nodes
   inline Array<Real> & getPositions() {
     return detector->getPositions();
   }
 
   /* ------------------------------------------------------------------------ */
   /* Class Members                                                            */
   /* ------------------------------------------------------------------------ */
 private:
   /// tells if the resolutions are instantiated
   bool are_resolutions_instantiated;
 
   /// displacements array
   Array<Real> * displacement{nullptr};
 
   /// increment of displacement
   Array<Real> * displacement_increment{nullptr};
 
   /// contact forces array
   Array<Real> * internal_force{nullptr};
 
   /// external forces array
   Array<Real> * external_force{nullptr};
 
   /// normal force array
   Array<Real> * normal_force{nullptr};
 
   /// friction force array
   Array<Real> * tangential_force{nullptr};
 
   /// friction traction array
   Array<Real> * tangential_tractions{nullptr};
   
   /// previous friction traction array
   Array<Real> * previous_tangential_tractions{nullptr};
   
   /// boundary vector
   Array<Real> * blocked_dofs{nullptr};
 
   /// array to store gap between slave and master
   Array<Real> * gaps{nullptr};
  
   /// array to store normals from master to slave
   Array<Real> * normals{nullptr};
 
   /// array to store tangents on the master element
   Array<Real> * tangents{nullptr};
 
   /// array to store previous tangents on the master element
   Array<Real> * previous_tangents{nullptr};
   
   /// array to store nodal areas
   Array<Real> * nodal_area{nullptr};
 
   /// array to store stick/slip state :
   Array<Real> * stick_or_slip{nullptr};
 
   /// array to store stick point projection in covariant basis
   Array<Real> * stick_projections{nullptr};
 
   /// array to store previous projections in covariant basis
   Array<Real> * previous_projections{nullptr};
   
   // array to store projections in covariant basis
   Array<Real> * projections{nullptr};
   
   /// contact detection
   std::unique_ptr<ContactDetector> detector;
 
   /// list of contact resolutions
   std::vector<std::unique_ptr<Resolution>> resolutions;
 
   /// mapping between resolution name and resolution internal id
   std::map<std::string, UInt> resolutions_names_to_id;
 
   /// array to store contact elements
   Array<ContactElement> contact_elements;
 
   /// array to store previous master elements
   Array<Element> * previous_master_elements{nullptr};
 };
 
 } // namespace akantu
 
 /* ------------------------------------------------------------------------ */
 /* inline functions                                                         */
 /* ------------------------------------------------------------------------ */
 #include "parser.hh"
 #include "resolution.hh"
 /* ------------------------------------------------------------------------ */
 
 #endif /* __AKANTU_CONTACT_MECHANICS_MODEL_HH__ */
diff --git a/src/model/model_couplers/coupler_solid_cohesive_contact.cc b/src/model/model_couplers/coupler_solid_cohesive_contact.cc
index c47a25a47..9c347b261 100644
--- a/src/model/model_couplers/coupler_solid_cohesive_contact.cc
+++ b/src/model/model_couplers/coupler_solid_cohesive_contact.cc
@@ -1,667 +1,667 @@
 /**
  * @file   coupler_solid_cohesive_contact.cc
  *
  * @author Mohit Pundir <mohit.pundir@epfl.ch>
  *
  * @date creation: Thu Jan 17 2019
  * @date last modification: Thu May 22 2019
  *
  * @brief  class for coupling of solid mechanics cohesive and conatct mechanics
  * model
  *
  * @section LICENSE
  *
  * Copyright (©)  2010-2018 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 #include "coupler_solid_cohesive_contact.hh"
 #include "dumpable_inline_impl.hh"
 #include "integrator_gauss.hh"
 #include "shape_lagrange.hh"
 #ifdef AKANTU_USE_IOHELPER
 #include "dumper_iohelper_paraview.hh"
 #endif
 /* -------------------------------------------------------------------------- */
 
 namespace akantu {
 
 CouplerSolidCohesiveContact::CouplerSolidCohesiveContact(
     Mesh & mesh, UInt dim, const ID & id,
     std::shared_ptr<DOFManager> dof_manager, const ModelType model_type)
     : Model(mesh, model_type, dof_manager, dim, id) {
 
   AKANTU_DEBUG_IN();
 
   this->registerFEEngineObject<MyFEEngineCohesiveType>("CohesiveFEEngine",
 						       mesh, Model::spatial_dimension);
 
 #if defined(AKANTU_USE_IOHELPER)
   this->mesh.registerDumper<DumperParaview>("coupler_solid_cohesive_contact",
                                             id, true);
   this->mesh.addDumpMeshToDumper("coupler_solid_cohesive_contact", mesh,
                                  Model::spatial_dimension, _not_ghost,
                                  _ek_cohesive);
 #endif
 
   this->registerDataAccessor(*this);
 
   solid = new SolidMechanicsModelCohesive(mesh, Model::spatial_dimension,
                                           "solid_mechanics_model_cohesive", 0,
                                           this->dof_manager);
   contact = new ContactMechanicsModel(mesh.getMeshFacets(), Model::spatial_dimension,
                                       "contact_mechanics_model", 0,
                                       this->dof_manager);
 
   registerFEEngineObject<MyFEEngineFacetType>(
       "FacetsFEEngine", mesh.getMeshFacets(), Model::spatial_dimension - 1);
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 CouplerSolidCohesiveContact::~CouplerSolidCohesiveContact() {}
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::initFullImpl(const ModelOptions & options) {
 
   Model::initFullImpl(options);
 
   this->initBC(*this, *displacement, *displacement_increment, *external_force);
   
   const auto & cscc_options =
       aka::as_type<CouplerSolidCohesiveContactOptions>(options);
   
   solid->initFull(  _analysis_method = cscc_options.analysis_method,
 		    _is_extrinsic = cscc_options.is_extrinsic);
   contact->initFull(_analysis_method = cscc_options.analysis_method);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::initModel() {
 
   getFEEngine("CohesiveFEEngine").initShapeFunctions(_not_ghost);
   getFEEngine("CohesiveFEEngine").initShapeFunctions(_ghost);
 
   getFEEngine("FacetsFEEngine").initShapeFunctions(_not_ghost);
   getFEEngine("FacetsFEEngine").initShapeFunctions(_ghost);
 }
 
 /* -------------------------------------------------------------------------- */
 FEEngine & CouplerSolidCohesiveContact::getFEEngineBoundary(const ID & name) {
   return dynamic_cast<FEEngine &>(
       getFEEngineClassBoundary<MyFEEngineCohesiveType>(name));
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::initSolver(TimeStepSolverType time_step_solver_type,
 					     NonLinearSolverType non_linear_solver_type) {
   auto & solid_model_solver =
     aka::as_type<ModelSolver>(*solid);
   solid_model_solver.initSolver(time_step_solver_type,  non_linear_solver_type);
 
   auto & contact_model_solver =
     aka::as_type<ModelSolver>(*contact);
   contact_model_solver.initSolver(time_step_solver_type,  non_linear_solver_type);
 
 }
 
 /* -------------------------------------------------------------------------- */
 std::tuple<ID, TimeStepSolverType>
 CouplerSolidCohesiveContact::getDefaultSolverID(const AnalysisMethod & method) {
 
   switch (method) {
   case _explicit_lumped_mass: {
     return std::make_tuple("explicit_lumped",
                            TimeStepSolverType::_dynamic_lumped);
   }
   case _explicit_consistent_mass: {
     return std::make_tuple("explicit", TimeStepSolverType::_dynamic);
   }
   case _static: {
     return std::make_tuple("static", TimeStepSolverType::_static);
   }
   case _implicit_dynamic: {
     return std::make_tuple("implicit", TimeStepSolverType::_dynamic);
   }
   default:
     return std::make_tuple("unknown", TimeStepSolverType::_not_defined);
   }  
   
   /*switch (method) {
   case _explicit_contact: {
     return std::make_tuple("explicit_contact", TimeStepSolverType::_static);
   }
   case _implicit_contact: {
     return std::make_tuple("implicit_contact", TimeStepSolverType::_static);
   }
   case _explicit_dynamic_contact: {
     return std::make_tuple("explicit_dynamic_contact",
                            TimeStepSolverType::_dynamic_lumped);
     break;
   }
   default:
     return std::make_tuple("unkown", TimeStepSolverType::_not_defined);
   }*/
 }
 
 /* -------------------------------------------------------------------------- */
 TimeStepSolverType CouplerSolidCohesiveContact::getDefaultSolverType() const {
   return TimeStepSolverType::_dynamic_lumped;
 }
 
 /* -------------------------------------------------------------------------- */
 ModelSolverOptions CouplerSolidCohesiveContact::getDefaultSolverOptions(
     const TimeStepSolverType & type) const {
   ModelSolverOptions options;
 
   switch (type) {
   case TimeStepSolverType::_dynamic_lumped: {
     options.non_linear_solver_type = NonLinearSolverType::_lumped;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_central_difference;
     options.solution_type["displacement"] = IntegrationScheme::_acceleration;
     break;
   }
   case TimeStepSolverType::_dynamic: {
     options.non_linear_solver_type = NonLinearSolverType::_lumped;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_central_difference;
     options.solution_type["displacement"] = IntegrationScheme::_acceleration;
     break;
   }
   case TimeStepSolverType::_static: {
     options.non_linear_solver_type =
         NonLinearSolverType::_newton_raphson_contact;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_pseudo_time;
     options.solution_type["displacement"] = IntegrationScheme::_not_defined;
     break;
   }
   default:
     AKANTU_EXCEPTION(type << " is not a valid time step solver type");
     break;
   }
 
   return options;
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleResidual() {
 
   // computes the internal forces
   this->assembleInternalForces();
 
   auto & internal_force = solid->getInternalForce();
   auto & external_force = solid->getExternalForce();
 
   auto & contact_force = contact->getInternalForce();
 
   /* -------------------------------------------------------------------------- */
   this->getDOFManager().assembleToResidual("displacement", external_force, 1);
   this->getDOFManager().assembleToResidual("displacement", internal_force, 1);
   this->getDOFManager().assembleToResidual("displacement", contact_force, 1);
   
   /*auto get_connectivity = [&](auto & slave, auto & master) {
     Vector<UInt> master_conn(const_cast<const Mesh &>(mesh).getConnectivity(master));
     Vector<UInt> elem_conn(master_conn.size() + 1);
 
     elem_conn[0] = slave;
     for (UInt i = 1; i < elem_conn.size(); ++i) {
       elem_conn[i] = master_conn[i - 1];
     }
     return elem_conn;
   };
 
   
   switch (method) {
   case _explicit_dynamic_contact:
   case _explicit_contact: {
     for (auto & element : contact->getContactElements()) {
       for (auto & conn : get_connectivity(element.slave, element.master)) {
 	for (auto dim : arange(spatial_dimension)) {
 	  external_force(conn, dim) = contact_force(conn, dim);
 	}
       }
     }
   }
   default:
     break;
     }*/
 
   /* ------------------------------------------------------------------------ */
   /*this->getDOFManager().assembleToResidual("displacement", external_force, 1);
   this->getDOFManager().assembleToResidual("displacement", internal_force, 1);
   switch (method) {
   case _implicit_contact: {
     this->getDOFManager().assembleToResidual("displacement", contact_force, 1);
     break;
   }
   default:
     break;
   }*/
 
   
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleResidual(const ID & residual_part) {
   AKANTU_DEBUG_IN();
 
   auto & internal_force = solid->getInternalForce();
   auto & external_force = solid->getExternalForce();
 
   auto & contact_force = contact->getInternalForce();
 
   /*auto get_connectivity = [&](auto & slave, auto & master) {
     Vector<UInt> master_conn(const_cast<const Mesh &>(mesh).getConnectivity(master));
     Vector<UInt> elem_conn(master_conn.size() + 1);
 
     elem_conn[0] = slave;
     for (UInt i = 1; i < elem_conn.size(); ++i) {
       elem_conn[i] = master_conn[i - 1];
     }
     return elem_conn;
   };
 
   
   switch (method) {
   case _explicit_dynamic_contact:
   case _explicit_contact: {
     for (auto & element : contact->getContactElements()) {
       for (auto & conn : get_connectivity(element.slave, element.master)) {
 	for (auto dim : arange(spatial_dimension)) {
 	  external_force(conn, dim) = contact_force(conn, dim);
 	}
       }
     }
   }
   default:
     break;
   }
 
   
   if ("external" == residual_part) {
     this->getDOFManager().assembleToResidual("displacement", external_force, 1);
     AKANTU_DEBUG_OUT();
     return;
   }
 
   if ("internal" == residual_part) {
     this->getDOFManager().assembleToResidual("displacement", internal_force, 1);
     switch (method) {
     case _implicit_contact: {
       this->getDOFManager().assembleToResidual("displacement", contact_force,
                                                1);
       break;
     }
     default:
       break;
     }
 
     AKANTU_DEBUG_OUT();
     return;
     }*/
 
   if ("external" == residual_part) {
     this->getDOFManager().assembleToResidual("displacement", external_force, 1);
     this->getDOFManager().assembleToResidual("displacement", contact_force, 1);
     AKANTU_DEBUG_OUT();
     return;
   }
 
   if ("internal" == residual_part) {
     this->getDOFManager().assembleToResidual("displacement", internal_force, 1);
     AKANTU_DEBUG_OUT();
     return;
   }
 
   AKANTU_CUSTOM_EXCEPTION(
       debug::SolverCallbackResidualPartUnknown(residual_part));
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::predictor() {
 
   
   auto & solid_model_solver =
     aka::as_type<ModelSolver>(*solid);
   solid_model_solver.predictor();
    
   switch (method) {
   case _static:
   case _explicit_lumped_mass: {    
     auto & current_positions = contact->getContactDetector().getPositions();
     current_positions.copy(solid->getCurrentPosition());
     contact->search();
     break;
   }
   default:
     break;
   }
   
   /*switch (method) {
   case _explicit_dynamic_contact: {
     Array<Real> displacement(0, Model::spatial_dimension);
 
     auto & current_positions = contact->getContactDetector().getPositions();
     current_positions.copy(mesh.getNodes());
 
     auto us = this->getDOFManager().getDOFs("displacement");
     const auto blocked_dofs =
         this->getDOFManager().getBlockedDOFs("displacement");
 
     for (auto && tuple : zip(make_view(us), make_view(blocked_dofs),
                              make_view(current_positions))) {
       auto & u = std::get<0>(tuple);
       const auto & bld = std::get<1>(tuple);
       auto & cp = std::get<2>(tuple);
 
       if (not bld)
         cp += u;
     }
 
     contact->search();
     break;
   }
   default:
     break;
   }*/
 
   
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::corrector() {
 
   
   auto & solid_model_solver =
     aka::as_type<ModelSolver>(*solid);
   solid_model_solver.corrector();
   
   switch (method) {
   case _static:
   case _implicit_dynamic:  {
     auto & current_positions = contact->getContactDetector().getPositions();
     current_positions.copy(solid->getCurrentPosition());
     contact->search();
     break;
   }
   default:
     break;
   }
   
   /*switch (method) {
   case _implicit_contact:
   case _explicit_contact: {
     Array<Real> displacement(0, Model::spatial_dimension);
 
     auto & current_positions = contact->getContactDetector().getPositions();
     current_positions.copy(mesh.getNodes());
 
     auto us = this->getDOFManager().getDOFs("displacement");
     const auto blocked_dofs =
         this->getDOFManager().getBlockedDOFs("displacement");
 
     for (auto && tuple : zip(make_view(us), make_view(blocked_dofs),
                              make_view(current_positions))) {
       auto & u = std::get<0>(tuple);
       const auto & bld = std::get<1>(tuple);
       auto & cp = std::get<2>(tuple);
 
       if (not bld)
         cp += u;
     }
 
     contact->search();
     break;
   }
   default:
     break;
   }*/
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::beforeSolveStep() {
   auto & solid_solver_callback =
     aka::as_type<SolverCallback>(*solid);
   solid_solver_callback.beforeSolveStep();
   
   auto & contact_solver_callback =
     aka::as_type<SolverCallback>(*contact);
   contact_solver_callback.beforeSolveStep();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::afterSolveStep(bool converged) {
   auto & solid_solver_callback =
     aka::as_type<SolverCallback>(*solid);
   solid_solver_callback.afterSolveStep(converged);
   
   auto & contact_solver_callback =
     aka::as_type<SolverCallback>(*contact);
   contact_solver_callback.afterSolveStep(converged);
 }
 
   
 /* -------------------------------------------------------------------------- */
 MatrixType CouplerSolidCohesiveContact::getMatrixType(const ID & matrix_id) {
 
   if (matrix_id == "K")
     return _symmetric;
   if (matrix_id == "M") {
     return _symmetric;
   }
   return _mt_not_defined;
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleMatrix(const ID & matrix_id) {
 
   if (matrix_id == "K") {
     this->assembleStiffnessMatrix();
   } else if (matrix_id == "M") {
     solid->assembleMass();
   }
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleLumpedMatrix(const ID & matrix_id) {
   if (matrix_id == "M") {
     solid->assembleMassLumped();
   }
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleInternalForces() {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_INFO("Assemble the internal forces");
 
   solid->assembleInternalForces();
   contact->assembleInternalForces();
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleStiffnessMatrix() {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_INFO("Assemble the new stiffness matrix");
 
   solid->assembleStiffnessMatrix();
 
   switch (method) {
   case _static:
   case _implicit_dynamic: {
     contact->assembleStiffnessMatrix();
     break;
   }
   default:
     break;
   }
   
   /*switch (method) {
   case _implicit_contact: {
     contact->assembleStiffnessMatrix();
     break;
   }
   default:
     break;
     }*/
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleMassLumped() {
   solid->assembleMassLumped();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleMass() { solid->assembleMass(); }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleMassLumped(GhostType ghost_type) {
   solid->assembleMassLumped(ghost_type);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::assembleMass(GhostType ghost_type) {
   solid->assembleMass(ghost_type);
 }
 
 /* -------------------------------------------------------------------------- */
 #ifdef AKANTU_USE_IOHELPER
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidCohesiveContact::createElementalField(
     const std::string & field_name, const std::string & group_name,
     bool padding_flag, const UInt & spatial_dimension,
     const ElementKind & kind) {
 
-  std::shared_ptr<dumper::Field> field;
+  std::shared_ptr<dumpers::Field> field;
   field = solid->createElementalField(field_name, group_name, padding_flag,
 				      spatial_dimension, kind);
   return field;
 }
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidCohesiveContact::createNodalFieldReal(
     const std::string & field_name, const std::string & group_name,
     bool padding_flag) {
 
-  std::shared_ptr<dumper::Field> field;
+  std::shared_ptr<dumpers::Field> field;
   if (field_name == "contact_force" or field_name == "normals" or
       field_name == "normal_force" or field_name == "tangential_force" or
       field_name == "stick_or_slip" or
       field_name == "gaps" or field_name == "previous_gaps" or
       field_name == "areas" or field_name == "tangents") {
     field =  contact->createNodalFieldReal(field_name, group_name, padding_flag);
   } else {
     field = solid->createNodalFieldReal(field_name, group_name, padding_flag);
   }
   
   return field;
 }
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidCohesiveContact::createNodalFieldBool(
     const std::string & field_name, const std::string & group_name,
     bool padding_flag) {
 
-  std::shared_ptr<dumper::Field> field;
+  std::shared_ptr<dumpers::Field> field;
   field = solid->createNodalFieldBool(field_name, group_name, padding_flag);
   return field;
 }
 
 #else
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidCohesiveContact::createElementalField(const std::string &,
                                                   const std::string &, bool,
                                                   const UInt &,
                                                   const ElementKind &) {
   return nullptr;
 }
 
 /* ----------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidCohesiveContact::createNodalFieldReal(const std::string &,
                                                   const std::string &, bool) {
   return nullptr;
 }
 
 /*-------------------------------------------------------------------*/
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidCohesiveContact::createNodalFieldBool(const std::string &,
                                                   const std::string &, bool) {
   return nullptr;
 }
 
 #endif
 
 /* --------------------------------------------------------------------------
  */
 void CouplerSolidCohesiveContact::dump(const std::string & dumper_name) {
   solid->onDump();
   mesh.dump(dumper_name);
 }
 
 /* --------------------------------------------------------------------------
  */
 void CouplerSolidCohesiveContact::dump(const std::string & dumper_name,
                                        UInt step) {
   solid->onDump();
   mesh.dump(dumper_name, step);
 }
 
 /* -------------------------------------------------------------------------
  */
 void CouplerSolidCohesiveContact::dump(const std::string & dumper_name,
                                        Real time, UInt step) {
   solid->onDump();
   mesh.dump(dumper_name, time, step);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::dump() {
   solid->onDump();
   mesh.dump();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::dump(UInt step) {
   solid->onDump();
   mesh.dump(step);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidCohesiveContact::dump(Real time, UInt step) {
   solid->onDump();
   mesh.dump(time, step);
 }
 
 } // namespace akantu
diff --git a/src/model/model_couplers/coupler_solid_cohesive_contact.hh b/src/model/model_couplers/coupler_solid_cohesive_contact.hh
index 8565fea57..5d09d4c2c 100644
--- a/src/model/model_couplers/coupler_solid_cohesive_contact.hh
+++ b/src/model/model_couplers/coupler_solid_cohesive_contact.hh
@@ -1,287 +1,287 @@
 /**
  * @file   coupler_solid_cohesive_contact.hh
  *
  * @author Mohit Pundir <mohit.pundir@epfl.ch>
  *
  * @date creation: Thu Jan 17 2019
  * @date last modification: Thu Jan 17 2019
  *
  * @brief  class for coupling of solid mechanics and conatct mechanics
  * model in explicit
  *
  * @section LICENSE
  *
  * Copyright (©)  2010-2018 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 #include "boundary_condition.hh"
 #include "contact_mechanics_model.hh"
 #include "data_accessor.hh"
 #include "model.hh"
 #include "solid_mechanics_model_cohesive.hh"
 #include "sparse_matrix.hh"
 #include "time_step_solver.hh"
 /* -------------------------------------------------------------------------- */
 
 #ifndef __AKANTU_COUPLER_SOLID_COHESIVE_CONTACT_HH__
 #define __AKANTU_COUPLER_SOLID_COHESIVE_CONTACT_HH__
 
 /* ------------------------------------------------------------------------ */
 /* Coupling : Solid Mechanics / Contact Mechanics                           */
 /* ------------------------------------------------------------------------ */
 namespace akantu {
 template <ElementKind kind, class IntegrationOrderFunctor>
 class IntegratorGauss;
 template <ElementKind kind> class ShapeLagrange;
 class DOFManager;
 } // namespace akantu
 
 /* -------------------------------------------------------------------------- */
 
 namespace akantu {
 
 /* -------------------------------------------------------------------------- */
 class CouplerSolidCohesiveContact
     : public Model,
       public DataAccessor<Element>,
       public DataAccessor<UInt>,
       public BoundaryCondition<CouplerSolidCohesiveContact> {
 
   /* ------------------------------------------------------------------------ */
   /* Constructor/Destructor                                                   */
   /* ------------------------------------------------------------------------ */
 
   using MyFEEngineCohesiveType =
       FEEngineTemplate<IntegratorGauss, ShapeLagrange, _ek_cohesive>;
   using MyFEEngineFacetType =
       FEEngineTemplate<IntegratorGauss, ShapeLagrange, _ek_regular,
                        FacetsCohesiveIntegrationOrderFunctor>;
 
 public:
   CouplerSolidCohesiveContact(
       Mesh & mesh, UInt spatial_dimension = _all_dimensions,
       const ID & id = "coupler_solid_cohesive_contact",
       std::shared_ptr<DOFManager> dof_manager = nullptr,
       const ModelType model_type = ModelType::_coupler_solid_cohesive_contact);
 
   ~CouplerSolidCohesiveContact() override;
 
   /* ------------------------------------------------------------------------ */
   /* Methods                                                                  */
   /* ------------------------------------------------------------------------ */
 protected:
   /// initialize completely the model
   void initFullImpl(const ModelOptions & options) override;
 
   /// initialize the modelType
   void initModel() override;
 
   /// get some default values for derived classes
   std::tuple<ID, TimeStepSolverType>
   getDefaultSolverID(const AnalysisMethod & method) override;
 
   /* ------------------------------------------------------------------------ */
   /* Solver Interface                                                         */
   /* ------------------------------------------------------------------------ */
 public:
   /// assembles the contact stiffness matrix
   virtual void assembleStiffnessMatrix();
 
   /// assembles the contant internal forces
   virtual void assembleInternalForces();
 
 protected:
   /// callback for the solver, this adds f_{ext} - f_{int} to the residual
   void assembleResidual() override;
 
   /// callback for the solver, this adds f_{ext} or  f_{int} to the residual
   void assembleResidual(const ID & residual_part) override;
   bool canSplitResidual() override { return true; }
 
   /// get the type of matrix needed
   MatrixType getMatrixType(const ID & matrix_id) override;
 
   /// callback for the solver, this assembles different matrices
   void assembleMatrix(const ID & matrix_id) override;
 
   /// callback for the solver, this assembles the stiffness matrix
   void assembleLumpedMatrix(const ID & matrix_id) override;
 
   /// callback for the solver, this is called at beginning of solve
   void predictor() override;
 
   /// callback for the solver, this is called at end of solve
   void corrector() override;
 
   /// callback for the solver, this is called at beginning of solve
   void beforeSolveStep() override;
 
   /// callback for the solver, this is called at end of solve
   void afterSolveStep(bool converged = true) override;
 
   /// callback for the model to instantiate the matricess when needed
   void initSolver(TimeStepSolverType, NonLinearSolverType) override;
 
   /* ------------------------------------------------------------------------ */
   /* Mass matrix for solid mechanics model                                    */
   /* ------------------------------------------------------------------------ */
 public:
   /// assemble the lumped mass matrix
   void assembleMassLumped();
 
   /// assemble the mass matrix for consistent mass resolutions
   void assembleMass();
 
 protected:
   /// assemble the lumped mass matrix for local and ghost elements
   void assembleMassLumped(GhostType ghost_type);
 
   /// assemble the mass matrix for either _ghost or _not_ghost elements
   void assembleMass(GhostType ghost_type);
 
 protected:
   /* --------------------------------------------------------------------------
    */
   TimeStepSolverType getDefaultSolverType() const override;
   /* --------------------------------------------------------------------------
    */
   ModelSolverOptions
   getDefaultSolverOptions(const TimeStepSolverType & type) const;
 
 public:
   bool isDefaultSolverExplicit() { return method == _explicit_dynamic_contact; }
 
   /* ------------------------------------------------------------------------ */
 public:
   // DataAccessor<Element>
   UInt getNbData(const Array<Element> &,
                  const SynchronizationTag &) const override {
     return 0;
   }
   void packData(CommunicationBuffer &, const Array<Element> &,
                 const SynchronizationTag &) const override {}
   void unpackData(CommunicationBuffer &, const Array<Element> &,
                   const SynchronizationTag &) override {}
 
   // DataAccessor<UInt> nodes
   UInt getNbData(const Array<UInt> &,
                  const SynchronizationTag &) const override {
     return 0;
   }
   void packData(CommunicationBuffer &, const Array<UInt> &,
                 const SynchronizationTag &) const override {}
   void unpackData(CommunicationBuffer &, const Array<UInt> &,
                   const SynchronizationTag &) override {}
 
   /* ------------------------------------------------------------------------ */
   /* Accessors                                                                */
   /* ------------------------------------------------------------------------ */
 public:
   FEEngine & getFEEngineBoundary(const ID & name = "") override;
 
   /* ------------------------------------------------------------------------ */
   /* Accessors                                                                */
   /* ------------------------------------------------------------------------ */
 public:
   /// return the dimension of the system space
   AKANTU_GET_MACRO(SpatialDimension, Model::spatial_dimension, UInt);
 
   /// get the ContactMechanicsModel::displacement vector
   AKANTU_GET_MACRO(Displacement, *displacement, Array<Real> &);
 
   /// get  the ContactMechanicsModel::increment  vector \warn  only  consistent
   /// if ContactMechanicsModel::setIncrementFlagOn has been called before
   AKANTU_GET_MACRO(Increment, *displacement_increment, Array<Real> &);
 
   /// get the ContactMechanicsModel::external_force vector (external forces)
   AKANTU_GET_MACRO(ExternalForce, *external_force, Array<Real> &);
 
   /// get the ContactMechanicsModel::force vector (external forces)
   Array<Real> & getForce() {
     AKANTU_DEBUG_WARNING("getForce was maintained for backward compatibility, "
                          "use getExternalForce instead");
     return *external_force;
   }
 
   /// get the solid mechanics model
   AKANTU_GET_MACRO(SolidMechanicsModelCohesive, *solid,
                    SolidMechanicsModelCohesive &);
 
   /// get the contact mechanics model
   AKANTU_GET_MACRO(ContactMechanicsModel, *contact, ContactMechanicsModel &);
 
   /* ------------------------------------------------------------------------ */
   /* Dumpable interface                                                       */
   /* ------------------------------------------------------------------------ */
 public:
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createNodalFieldReal(const std::string & field_name,
                        const std::string & group_name,
                        bool padding_flag) override;
 
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createNodalFieldBool(const std::string & field_name,
                        const std::string & group_name,
                        bool padding_flag) override;
 
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createElementalField(const std::string & field_name,
                        const std::string & group_name, bool padding_flag,
                        const UInt & spatial_dimension,
                        const ElementKind & kind) override;
 
   virtual void dump(const std::string & dumper_name);
 
   virtual void dump(const std::string & dumper_name, UInt step);
 
   virtual void dump(const std::string & dumper_name, Real time, UInt step);
 
   void dump() override;
 
   virtual void dump(UInt step);
 
   virtual void dump(Real time, UInt step);
 
   /* ------------------------------------------------------------------------ */
   /* Members                                                                  */
   /* ------------------------------------------------------------------------ */
 private:
   /// solid mechanics model
   SolidMechanicsModelCohesive * solid{nullptr};
 
   /// contact mechanics model
   ContactMechanicsModel * contact{nullptr};
 
   ///
   Array<Real> * displacement{nullptr};
 
   ///
   Array<Real> * displacement_increment{nullptr};
 
   /// external forces array
   Array<Real> * external_force{nullptr};
 
   bool search_for_contact;
 
   UInt step;
 };
 
 } // namespace akantu
 
 #endif /* __COUPLER_SOLID_CONTACT_HH__  */
diff --git a/src/model/model_couplers/coupler_solid_contact.cc b/src/model/model_couplers/coupler_solid_contact.cc
index 9295c7156..a2fe4a987 100644
--- a/src/model/model_couplers/coupler_solid_contact.cc
+++ b/src/model/model_couplers/coupler_solid_contact.cc
@@ -1,535 +1,535 @@
 /**
  * @file   coupler_solid_contact.cc
  *
  * @author Mohit Pundir <mohit.pundir@epfl.ch>
  *
  * @date creation: Thu Jan 17 2019
  * @date last modification: Thu May 22 2019
  *
  * @brief  class for coupling of solid mechanics and conatct mechanics
  * model
  *
  * @section LICENSE
  *
  * Copyright (©)  2010-2018 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 #include "coupler_solid_contact.hh"
 #include "dumpable_inline_impl.hh"
 #include "integrator_gauss.hh"
 #include "shape_lagrange.hh"
 
 #ifdef AKANTU_USE_IOHELPER
 #include "dumper_iohelper_paraview.hh"
 #endif
 /* -------------------------------------------------------------------------- */
 
 namespace akantu {
 
 CouplerSolidContact::CouplerSolidContact(
     Mesh & mesh, UInt dim, const ID & id, const MemoryID & memory_id,
     std::shared_ptr<DOFManager> dof_manager, const ModelType model_type)
     : Model(mesh, model_type, dof_manager, dim, id, memory_id) {
 
   AKANTU_DEBUG_IN();
 
   this->registerFEEngineObject<MyFEEngineType>("CouplerSolidContact", mesh,
                                                Model::spatial_dimension);
 
 #if defined(AKANTU_USE_IOHELPER)
   this->mesh.registerDumper<DumperParaview>("coupler_solid_contact", id, true);
   this->mesh.addDumpMeshToDumper("coupler_solid_contact", mesh,
                                  Model::spatial_dimension, _not_ghost,
                                  _ek_regular);
 #endif
 
   this->registerDataAccessor(*this);
 
   solid =
       new SolidMechanicsModel(mesh, Model::spatial_dimension,
                               "solid_mechanics_model", 0, this->dof_manager);
   contact = new ContactMechanicsModel(mesh, Model::spatial_dimension,
                                       "contact_mechanics_model", 0,
                                       this->dof_manager);
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 CouplerSolidContact::~CouplerSolidContact() {}
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::initFullImpl(const ModelOptions & options) {
 
   Model::initFullImpl(options);
 
   this->initBC(*this, *displacement, *displacement_increment, *external_force);
 
   solid->initFull(  _analysis_method  = this->method); 
   contact->initFull(_analysis_method  = this->method);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::initModel() {
 
   getFEEngine().initShapeFunctions(_not_ghost);
   getFEEngine().initShapeFunctions(_ghost);
 }
 
 /* -------------------------------------------------------------------------- */
 FEEngine & CouplerSolidContact::getFEEngineBoundary(const ID & name) {
   return dynamic_cast<FEEngine &>(
       getFEEngineClassBoundary<MyFEEngineType>(name));
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::initSolver(TimeStepSolverType time_step_solver_type,
 				     NonLinearSolverType non_linear_solver_type) {
   auto & solid_model_solver =
     aka::as_type<ModelSolver>(*solid);
   solid_model_solver.initSolver(time_step_solver_type,  non_linear_solver_type);
 
   auto & contact_model_solver =
     aka::as_type<ModelSolver>(*contact);
   contact_model_solver.initSolver(time_step_solver_type,  non_linear_solver_type);
 }
 
 /* -------------------------------------------------------------------------- */
 std::tuple<ID, TimeStepSolverType>
 CouplerSolidContact::getDefaultSolverID(const AnalysisMethod & method) {
 
   switch (method) {
   case _explicit_lumped_mass: {
     return std::make_tuple("explicit_lumped",
                            TimeStepSolverType::_dynamic_lumped);
   }
   case _explicit_consistent_mass: {
     return std::make_tuple("explicit", TimeStepSolverType::_dynamic);
   }
   case _static: {
     return std::make_tuple("static", TimeStepSolverType::_static);
   }
   case _implicit_dynamic: {
     return std::make_tuple("implicit", TimeStepSolverType::_dynamic);
   }
   default:
     return std::make_tuple("unknown", TimeStepSolverType::_not_defined);
   }  
 }
 
 /* -------------------------------------------------------------------------- */
 TimeStepSolverType CouplerSolidContact::getDefaultSolverType() const {
   return TimeStepSolverType::_dynamic_lumped;
 }
 
 /* -------------------------------------------------------------------------- */
 ModelSolverOptions CouplerSolidContact::getDefaultSolverOptions(
     const TimeStepSolverType & type) const {
   ModelSolverOptions options;
 
   switch (type) {
   case TimeStepSolverType::_dynamic_lumped: {
     options.non_linear_solver_type = NonLinearSolverType::_lumped;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_central_difference;
     options.solution_type["displacement"] = IntegrationScheme::_acceleration;
     break;
   }
   case TimeStepSolverType::_dynamic: {
     options.non_linear_solver_type = NonLinearSolverType::_lumped;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_central_difference;
     options.solution_type["displacement"] = IntegrationScheme::_acceleration;
     break;
   }
   case TimeStepSolverType::_static: {
     options.non_linear_solver_type =
         NonLinearSolverType::_newton_raphson_contact;
     options.integration_scheme_type["displacement"] =
         IntegrationSchemeType::_pseudo_time;
     options.solution_type["displacement"] = IntegrationScheme::_not_defined;
     break;
   }
   default:
     AKANTU_EXCEPTION(type << " is not a valid time step solver type");
     break;
   }
 
   return options;
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleResidual() {
 
   // computes the internal forces
   this->assembleInternalForces();
 
   auto & internal_force = solid->getInternalForce();
   auto & external_force = solid->getExternalForce();
 
   auto & contact_force = contact->getInternalForce();
 
   /*auto get_connectivity = [&](auto & slave, auto & master) {
     Vector<UInt> master_conn(const_cast<const Mesh &>(mesh).getConnectivity(master));
     Vector<UInt> elem_conn(master_conn.size() + 1);
 
     elem_conn[0] = slave;
     for (UInt i = 1; i < elem_conn.size(); ++i) {
       elem_conn[i] = master_conn[i - 1];
     }
     return elem_conn;
   };
 
   
   switch(method) {
   case _explicit_contact:
   case _implicit_contact:  
   case _explicit_dynamic_contact: {
     for (auto & element : contact->getContactElements()) {
       for (auto & conn : get_connectivity(element.slave, element.master)) {
 	for (auto dim : arange(spatial_dimension)) {
 	  external_force(conn, dim) = contact_force(conn, dim);
 	}
       }
     }
   }
   default:
     break;
   }*/
   
 
   /* ------------------------------------------------------------------------ */
   this->getDOFManager().assembleToResidual("displacement", external_force, 1);
   this->getDOFManager().assembleToResidual("displacement", internal_force, 1);
   this->getDOFManager().assembleToResidual("displacement", contact_force, 1);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleResidual(const ID & residual_part) {
   AKANTU_DEBUG_IN();
 
   //contact->assembleInternalForces();
   
   auto & internal_force = solid->getInternalForce();
   auto & external_force = solid->getExternalForce();
   auto & contact_force = contact->getInternalForce();
 
   /*auto get_connectivity = [&](auto & slave, auto & master) {
     Vector<UInt> master_conn(const_cast<const Mesh &>(mesh).getConnectivity(master));
      Vector<UInt> elem_conn(master_conn.size() + 1);
 
     elem_conn[0] = slave;
     for (UInt i = 1; i < elem_conn.size(); ++i) {
       elem_conn[i] = master_conn[i - 1];
     }
     return elem_conn;
     };
 
   
   switch(method) {
   case _explicit_dynamic_contact: {
     for (auto & element : contact->getContactElements()) {
       for (auto & conn : get_connectivity(element.slave, element.master)) {
 	for (auto dim : arange(spatial_dimension)) {
 	  external_force(conn, dim) = contact_force(conn, dim);
 	}
       }
     }
   }
   default:
     break;
     }*/
 
   
   if ("external" == residual_part) {
     this->getDOFManager().assembleToResidual("displacement", external_force, 1);
     this->getDOFManager().assembleToResidual("displacement", contact_force, 1);
     AKANTU_DEBUG_OUT();
     return;
   }
 
   if ("internal" == residual_part) {
     this->getDOFManager().assembleToResidual("displacement", internal_force, 1);
     AKANTU_DEBUG_OUT();
     return;
   }
 
   AKANTU_CUSTOM_EXCEPTION(
       debug::SolverCallbackResidualPartUnknown(residual_part));
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::predictor() {
 
   auto & solid_model_solver =
     aka::as_type<ModelSolver>(*solid);
   solid_model_solver.predictor();
   
     
   switch (method) {
   case _static:
   case _explicit_lumped_mass: {    
     auto & current_positions = contact->getContactDetector().getPositions();
     current_positions.copy(solid->getCurrentPosition());
     contact->search();
     break;
   }
   default:
     break;
   }
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::corrector() {
 
   auto & solid_model_solver =
     aka::as_type<ModelSolver>(*solid);
   solid_model_solver.corrector();
   
   switch (method) {
   case _static:
   case _implicit_dynamic:  {
     auto & current_positions = contact->getContactDetector().getPositions();
     current_positions.copy(solid->getCurrentPosition());
     contact->search();
     break;
   }
   default:
     break;
   }
 }
 
 /* -------------------------------------------------------------------------- */
 MatrixType CouplerSolidContact::getMatrixType(const ID & matrix_id) {
 
   if (matrix_id == "K")
     return _symmetric;
   if (matrix_id == "M") {
     return _symmetric;
   }
   return _mt_not_defined;
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleMatrix(const ID & matrix_id) {
 
   if (matrix_id == "K") {
     this->assembleStiffnessMatrix();
   } else if (matrix_id == "M") {
     solid->assembleMass();
   }
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleLumpedMatrix(const ID & matrix_id) {
   if (matrix_id == "M") {
     solid->assembleMassLumped();
   }
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::beforeSolveStep() {
   auto & solid_solver_callback =
     aka::as_type<SolverCallback>(*solid);
   solid_solver_callback.beforeSolveStep();
   
   auto & contact_solver_callback =
     aka::as_type<SolverCallback>(*contact);
   contact_solver_callback.beforeSolveStep();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::afterSolveStep(bool converged) {
   auto & solid_solver_callback =
     aka::as_type<SolverCallback>(*solid);
   solid_solver_callback.afterSolveStep(converged);
   
   auto & contact_solver_callback =
     aka::as_type<SolverCallback>(*contact);
   contact_solver_callback.afterSolveStep(converged);
 }
 
 
   
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleInternalForces() {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_INFO("Assemble the internal forces");
 
   solid->assembleInternalForces();
   contact->assembleInternalForces();
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleStiffnessMatrix() {
   AKANTU_DEBUG_IN();
 
   AKANTU_DEBUG_INFO("Assemble the new stiffness matrix");
 
   solid->assembleStiffnessMatrix();
 
   switch (method) {
   case _static:
   case _implicit_dynamic: {
     contact->assembleStiffnessMatrix();
     break;
   }
   default:
     break;
   }
 
   AKANTU_DEBUG_OUT();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleMassLumped() { solid->assembleMassLumped(); }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleMass() { solid->assembleMass(); }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleMassLumped(GhostType ghost_type) {
   solid->assembleMassLumped(ghost_type);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::assembleMass(GhostType ghost_type) {
   solid->assembleMass(ghost_type);
 }
 
 /* -------------------------------------------------------------------------- */
 #ifdef AKANTU_USE_IOHELPER
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field> CouplerSolidContact::createElementalField(
+std::shared_ptr<dumpers::Field> CouplerSolidContact::createElementalField(
     const std::string & field_name, const std::string & group_name,
     bool padding_flag, const UInt & spatial_dimension,
     const ElementKind & kind) {
 
-  std::shared_ptr<dumper::Field> field;
+  std::shared_ptr<dumpers::Field> field;
   field = solid->createElementalField(field_name, group_name, padding_flag,
                                      spatial_dimension, kind);
  
   return field;
 }
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidContact::createNodalFieldReal(const std::string & field_name,
                                           const std::string & group_name,
                                           bool padding_flag) {
 
-  std::shared_ptr<dumper::Field> field;
+  std::shared_ptr<dumpers::Field> field;
   if (field_name == "contact_force" or field_name == "normals" or
       field_name == "normal_force" or field_name == "tangential_force" or
       field_name == "stick_or_slip" or
       field_name == "gaps" or field_name == "previous_gaps" or
       field_name == "areas" or field_name == "tangents") {
     field =  contact->createNodalFieldReal(field_name, group_name, padding_flag);
   } else {
     field = solid->createNodalFieldReal(field_name, group_name, padding_flag);
   }
 
   return field;
 }
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidContact::createNodalFieldBool(const std::string & field_name,
                                           const std::string & group_name,
                                           bool padding_flag) {
 
   
-  std::shared_ptr<dumper::Field> field;
+  std::shared_ptr<dumpers::Field> field;
   field = solid->createNodalFieldBool(field_name, group_name, padding_flag);
   return field;
 }
 
 #else
 
 /* -------------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidContact::createElementalField(const std::string &,
                                           const std::string &, bool,
                                           const UInt &, const ElementKind &) {
   return nullptr;
 }
 
 /* ----------------------------------------------------------------------- */
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidContact::createNodalFieldReal(const std::string &,
                                           const std::string &, bool) {
   return nullptr;
 }
 
 /*-------------------------------------------------------------------*/
-std::shared_ptr<dumper::Field>
+std::shared_ptr<dumpers::Field>
 CouplerSolidContact::createNodalFieldBool(const std::string &,
                                           const std::string &, bool) {
   return nullptr;
 }
 
 #endif
 
 /* --------------------------------------------------------------------------
  */
 void CouplerSolidContact::dump(const std::string & dumper_name) {
   solid->onDump();
   mesh.dump(dumper_name);
 }
 
 /* --------------------------------------------------------------------------
  */
 void CouplerSolidContact::dump(const std::string & dumper_name, UInt step) {
   solid->onDump();
   mesh.dump(dumper_name, step);
 }
 
 /* -------------------------------------------------------------------------
  */
 void CouplerSolidContact::dump(const std::string & dumper_name, Real time,
                                UInt step) {
   solid->onDump();
   mesh.dump(dumper_name, time, step);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::dump() {
   solid->onDump();
   mesh.dump();
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::dump(UInt step) {
   solid->onDump();
   mesh.dump(step);
 }
 
 /* -------------------------------------------------------------------------- */
 void CouplerSolidContact::dump(Real time, UInt step) {
   solid->onDump();
   mesh.dump(time, step);
 }
 
 } // namespace akantu
diff --git a/src/model/model_couplers/coupler_solid_contact.hh b/src/model/model_couplers/coupler_solid_contact.hh
index 46e5fdbab..083409526 100644
--- a/src/model/model_couplers/coupler_solid_contact.hh
+++ b/src/model/model_couplers/coupler_solid_contact.hh
@@ -1,282 +1,282 @@
 /**
  * @file   coupler_solid_contact_explicit.hh
  *
  * @author Mohit Pundir <mohit.pundir@epfl.ch>
  *
  * @date creation: Thu Jan 17 2019
  * @date last modification: Thu Jan 17 2019
  *
  * @brief  class for coupling of solid mechanics and conatct mechanics
  * model in explicit
  *
  * @section LICENSE
  *
  * Copyright (©)  2010-2018 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 #include "boundary_condition.hh"
 #include "contact_mechanics_model.hh"
 #include "data_accessor.hh"
 #include "fe_engine.hh"
 #include "model.hh"
 #include "solid_mechanics_model.hh"
 #include "sparse_matrix.hh"
 #include "time_step_solver.hh"
 /* -------------------------------------------------------------------------- */
 
 #ifndef __AKANTU_COUPLER_SOLID_CONTACT_HH__
 #define __AKANTU_COUPLER_SOLID_CONTACT_HH__
 
 /* ------------------------------------------------------------------------ */
 /* Coupling : Solid Mechanics / Contact Mechanics                           */
 /* ------------------------------------------------------------------------ */
 namespace akantu {
 template <ElementKind kind, class IntegrationOrderFunctor>
 class IntegratorGauss;
 template <ElementKind kind> class ShapeLagrange;
 class DOFManager;
 } // namespace akantu
 
 /* -------------------------------------------------------------------------- */
 
 namespace akantu {
 
 /* -------------------------------------------------------------------------- */
 class CouplerSolidContact : public Model,
                             public DataAccessor<Element>,
                             public DataAccessor<UInt>,
                             public BoundaryCondition<CouplerSolidContact> {
 
   /* ------------------------------------------------------------------------ */
   /* Constructor/Destructor                                                   */
   /* ------------------------------------------------------------------------ */
 
   using MyFEEngineType = FEEngineTemplate<IntegratorGauss, ShapeLagrange>;
 
 public:
   CouplerSolidContact(
       Mesh & mesh, UInt spatial_dimension = _all_dimensions,
       const ID & id = "coupler_solid_contact", const MemoryID & memory_id = 0,
       std::shared_ptr<DOFManager> dof_manager = nullptr,
       const ModelType model_type = ModelType::_coupler_solid_contact);
 
   ~CouplerSolidContact() override;
 
   /* ------------------------------------------------------------------------ */
   /* Methods                                                                  */
   /* ------------------------------------------------------------------------ */
 protected:
   /// initialize completely the model
   void initFullImpl(const ModelOptions & options) override;
 
   /// initialize the modelType
   void initModel() override;
 
   /// get some default values for derived classes
   std::tuple<ID, TimeStepSolverType>
   getDefaultSolverID(const AnalysisMethod & method) override;
 
   /* ------------------------------------------------------------------------ */
   /* Solver Interface                                                         */
   /* ------------------------------------------------------------------------ */
 public:
   /// assembles the contact stiffness matrix
   virtual void assembleStiffnessMatrix();
 
   /// assembles the contant internal forces
   virtual void assembleInternalForces();
 
 protected:
   /// callback for the solver, this adds f_{ext} - f_{int} to the residual
   void assembleResidual() override;
 
   /// callback for the solver, this adds f_{ext} or  f_{int} to the residual
   void assembleResidual(const ID & residual_part) override;
   bool canSplitResidual() override { return true; }
 
   /// get the type of matrix needed
   MatrixType getMatrixType(const ID & matrix_id) override;
 
   /// callback for the solver, this assembles different matrices
   void assembleMatrix(const ID & matrix_id) override;
 
   /// callback for the solver, this assembles the stiffness matrix
   void assembleLumpedMatrix(const ID & matrix_id) override;
 
   /// callback for the solver, this is called at beginning of solve
   void predictor() override;
 
   /// callback for the solver, this is called at end of solve
   void corrector() override;
 
   /// callback for the solver, this is called at beginning of solve
   void beforeSolveStep() override;
 
   /// callback for the solver, this is called at end of solve
   void afterSolveStep(bool converged = true) override;
 
   /// callback for the model to instantiate the matricess when needed
   void initSolver(TimeStepSolverType, NonLinearSolverType) override;
 
   /* ------------------------------------------------------------------------ */
   /* Mass matrix for solid mechanics model                                    */
   /* ------------------------------------------------------------------------ */
 public:
   /// assemble the lumped mass matrix
   void assembleMassLumped();
 
   /// assemble the mass matrix for consistent mass resolutions
   void assembleMass();
 
 protected:
   /// assemble the lumped mass matrix for local and ghost elements
   void assembleMassLumped(GhostType ghost_type);
 
   /// assemble the mass matrix for either _ghost or _not_ghost elements
   void assembleMass(GhostType ghost_type);
 
 protected:
   /* --------------------------------------------------------------------------
    */
   TimeStepSolverType getDefaultSolverType() const override;
   /* --------------------------------------------------------------------------
    */
   ModelSolverOptions
   getDefaultSolverOptions(const TimeStepSolverType & type) const;
 
 public:
   bool isDefaultSolverExplicit() { return method == _explicit_dynamic_contact; }
 
   /* ------------------------------------------------------------------------ */
 public:
   // DataAccessor<Element>
   UInt getNbData(const Array<Element> &,
                  const SynchronizationTag &) const override {
     return 0;
   }
   void packData(CommunicationBuffer &, const Array<Element> &,
                 const SynchronizationTag &) const override {}
   void unpackData(CommunicationBuffer &, const Array<Element> &,
                   const SynchronizationTag &) override {}
 
   // DataAccessor<UInt> nodes
   UInt getNbData(const Array<UInt> &,
                  const SynchronizationTag &) const override {
     return 0;
   }
   void packData(CommunicationBuffer &, const Array<UInt> &,
                 const SynchronizationTag &) const override {}
   void unpackData(CommunicationBuffer &, const Array<UInt> &,
                   const SynchronizationTag &) override {}
 
   /* ------------------------------------------------------------------------ */
   /* Accessors                                                                */
   /* ------------------------------------------------------------------------ */
 public:
   FEEngine & getFEEngineBoundary(const ID & name = "") override;
 
   /* ------------------------------------------------------------------------ */
   /* Accessors                                                                */
   /* ------------------------------------------------------------------------ */
 public:
   /// return the dimension of the system space
   AKANTU_GET_MACRO(SpatialDimension, Model::spatial_dimension, UInt);
 
   /// get the ContactMechanicsModel::displacement vector
   AKANTU_GET_MACRO(Displacement, *displacement, Array<Real> &);
 
   /// get  the ContactMechanicsModel::increment  vector \warn  only  consistent
   /// if ContactMechanicsModel::setIncrementFlagOn has been called before
   AKANTU_GET_MACRO(Increment, *displacement_increment, Array<Real> &);
 
   /// get the ContactMechanicsModel::external_force vector (external forces)
   AKANTU_GET_MACRO(ExternalForce, *external_force, Array<Real> &);
 
   /// get the ContactMechanicsModel::force vector (external forces)
   Array<Real> & getForce() {
     AKANTU_DEBUG_WARNING("getForce was maintained for backward compatibility, "
                          "use getExternalForce instead");
     return *external_force;
   }
 
   /// get the solid mechanics model
   AKANTU_GET_MACRO(SolidMechanicsModel, *solid, SolidMechanicsModel &);
 
   /// get the contact mechanics model
   AKANTU_GET_MACRO(ContactMechanicsModel, *contact, ContactMechanicsModel &);
 
   /* ------------------------------------------------------------------------ */
   /* Dumpable interface                                                       */
   /* ------------------------------------------------------------------------ */
 public:
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createNodalFieldReal(const std::string & field_name,
                        const std::string & group_name,
                        bool padding_flag) override;
 
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createNodalFieldBool(const std::string & field_name,
                        const std::string & group_name,
                        bool padding_flag) override;
 
-  std::shared_ptr<dumper::Field>
+  std::shared_ptr<dumpers::Field>
   createElementalField(const std::string & field_name,
                        const std::string & group_name, bool padding_flag,
                        const UInt & spatial_dimension,
                        const ElementKind & kind) override;
 
   virtual void dump(const std::string & dumper_name);
 
   virtual void dump(const std::string & dumper_name, UInt step);
 
   virtual void dump(const std::string & dumper_name, Real time, UInt step);
 
   void dump() override;
 
   virtual void dump(UInt step);
 
   virtual void dump(Real time, UInt step);
 
   /* ------------------------------------------------------------------------ */
   /* Members                                                                  */
   /* ------------------------------------------------------------------------ */
 private:
   /// solid mechanics model
   SolidMechanicsModel * solid{nullptr};
 
   /// contact mechanics model
   ContactMechanicsModel * contact{nullptr};
 
   ///
   Array<Real> * displacement{nullptr};
 
   ///
   Array<Real> * displacement_increment{nullptr};
 
   /// external forces array
   Array<Real> * external_force{nullptr};
 
   bool search_for_contact;
 
   UInt step;
 };
 
 } // namespace akantu
 
 #endif /* __COUPLER_SOLID_CONTACT_HH__  */