37    using CellCenterSolutionVector = 
typename std::decay_t<decltype(std::declval<SolutionVector>()[GridGeometry::cellCenterIdx()])>;
 
   57                                     const std::string& name = 
"newton_convergence")
 
   58    : gridGeometry_(gridGeometry)
 
   59    , ccWriter_(gridGeometry.gridView(), name, 
"", 
"")
 
   61    , faceSequenceWriter_(faceWriter_, name + 
"-face", 
"",
"",
 
   62                          gridGeometry.gridView().comm().rank(),
 
   63                          gridGeometry.gridView().comm().size())
 
   67        for (
int eqIdx = 0; eqIdx < numEqCellCenter; ++eqIdx)
 
   69            ccWriter_.addCellData(xCellCenter_[eqIdx], 
"x_" + std::to_string(eqIdx));
 
   70            ccWriter_.addCellData(deltaCellCenter_[eqIdx], 
"delta_" + std::to_string(eqIdx));
 
   71            ccWriter_.addCellData(defCellCenter_[eqIdx], 
"defect_" + std::to_string(eqIdx));
 
 
   78        const auto numCellCenterDofs = gridGeometry_.numCellCenterDofs();
 
   79        const auto numFaceDofs = gridGeometry_.numFaceDofs();
 
   82        for (
int eqIdx = 0; eqIdx < numEqCellCenter; ++eqIdx)
 
   84            defCellCenter_[eqIdx].resize(numCellCenterDofs);
 
   85            deltaCellCenter_[eqIdx].resize(numCellCenterDofs);
 
   86            xCellCenter_[eqIdx].resize(numCellCenterDofs);
 
   90        for (
int eqIdx = 0; eqIdx < numEqFace; ++eqIdx)
 
   92            defFace_[eqIdx].resize(numFaceDofs);
 
   93            deltaFace_[eqIdx].resize(numFaceDofs);
 
   94            xFace_[eqIdx].resize(numFaceDofs);
 
   97        coordinates_.resize(numFaceDofs);
 
   98        for (
auto&& facet : facets(gridGeometry_.gridView()))
 
  100            const auto dofIdxGlobal = gridGeometry_.gridView().indexSet().index(facet);
 
  101            coordinates_[dofIdxGlobal] = facet.geometry().center();
 
 
  110    void write(
const SolutionVector& uLastIter,
 
  111               const ResidualVector& deltaU,
 
  112               const ResidualVector& residual)
 override 
  114        assert(uLastIter.size() == deltaU.size() && uLastIter.size() == residual.size());
 
  116        for (std::size_t dofIdxGlobal = 0; dofIdxGlobal < deltaU[GridGeometry::cellCenterIdx()].size(); ++dofIdxGlobal)
 
  118            for (
int eqIdx = 0; eqIdx < numEqCellCenter; ++eqIdx)
 
  120                xCellCenter_[eqIdx][dofIdxGlobal] = uLastIter[GridGeometry::cellCenterIdx()][dofIdxGlobal][eqIdx];
 
  121                deltaCellCenter_[eqIdx][dofIdxGlobal] = - deltaU[GridGeometry::cellCenterIdx()][dofIdxGlobal][eqIdx];
 
  122                defCellCenter_[eqIdx][dofIdxGlobal] = residual[GridGeometry::cellCenterIdx()][dofIdxGlobal][eqIdx];
 
  126        for (
int eqIdx = 0; eqIdx < numEqFace; ++eqIdx)
 
  128            faceWriter_->addPointData(xFace_[eqIdx], 
"x_" + std::to_string(eqIdx));
 
  129            faceWriter_->addPointData(deltaFace_[eqIdx], 
"delta_" + std::to_string(eqIdx));
 
  130            faceWriter_->addPointData(defFace_[eqIdx], 
"defect_" + std::to_string(eqIdx));
 
  133        for (std::size_t dofIdxGlobal = 0; dofIdxGlobal < deltaU[GridGeometry::faceIdx()].size(); ++dofIdxGlobal)
 
  135            for (
int eqIdx = 0; eqIdx < numEqFace; ++eqIdx)
 
  137                xFace_[eqIdx][dofIdxGlobal] = uLastIter[GridGeometry::faceIdx()][dofIdxGlobal][eqIdx];
 
  138                deltaFace_[eqIdx][dofIdxGlobal] = - deltaU[GridGeometry::faceIdx()][dofIdxGlobal][eqIdx];
 
  139                defFace_[eqIdx][dofIdxGlobal] = residual[GridGeometry::faceIdx()][dofIdxGlobal][eqIdx];
 
  143        ccWriter_.write(
static_cast<double>(id_) + 
static_cast<double>(iteration_)/1000);
 
  144        faceSequenceWriter_.write(
static_cast<double>(id_) + 
static_cast<double>(iteration_)/1000);