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);