60                            const std::string& name = 
"newton_convergence")
 
   61    : gridGeometry_(gridGeometry)
 
   62    , writer_(gridGeometry.gridView(), name, 
"", 
"")
 
   68            for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
 
   70                writer_.addVertexData(x_[eqIdx], 
"x_" + std::to_string(eqIdx));
 
   71                writer_.addVertexData(delta_[eqIdx], 
"delta_" + std::to_string(eqIdx));
 
   72                writer_.addVertexData(def_[eqIdx], 
"defect_" + std::to_string(eqIdx));
 
   77            for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
 
   79                writer_.addCellData(x_[eqIdx], 
"x_" + std::to_string(eqIdx));
 
   80                writer_.addCellData(delta_[eqIdx], 
"delta_" + std::to_string(eqIdx));
 
   81                writer_.addCellData(def_[eqIdx], 
"defect_" + std::to_string(eqIdx));
 
 
   89        const auto numDofs = gridGeometry_.numDofs();
 
   92        for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
 
   94            def_[eqIdx].resize(numDofs);
 
   95            delta_[eqIdx].resize(numDofs);
 
   96            x_[eqIdx].resize(numDofs);
 
 
  105    void write(
const SolutionVector& uLastIter,
 
  106               const ResidualVector& deltaU,
 
  107               const ResidualVector& residual)
 override 
  109        assert(uLastIter.size() == deltaU.size() && uLastIter.size() == residual.size());
 
  111        for (std::size_t dofIdxGlobal = 0; dofIdxGlobal < deltaU.size(); ++dofIdxGlobal)
 
  113            for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
 
  115                x_[eqIdx][dofIdxGlobal] = uLastIter[dofIdxGlobal][eqIdx];
 
  116                delta_[eqIdx][dofIdxGlobal] = - deltaU[dofIdxGlobal][eqIdx];
 
  117                def_[eqIdx][dofIdxGlobal] = residual[dofIdxGlobal][eqIdx];
 
  121        writer_.write(
static_cast<double>(id_) + 
static_cast<double>(iteration_)/1000);