69 const std::string& name =
"newton_convergence")
70 : gridGeometry_(gridGeometry)
71 , writer_(gridGeometry.gridView(), name,
"",
"")
77 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
79 writer_.addVertexData(x_[eqIdx],
"x_" + std::to_string(eqIdx));
80 writer_.addVertexData(delta_[eqIdx],
"delta_" + std::to_string(eqIdx));
81 writer_.addVertexData(def_[eqIdx],
"defect_" + std::to_string(eqIdx));
86 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
88 writer_.addCellData(x_[eqIdx],
"x_" + std::to_string(eqIdx));
89 writer_.addCellData(delta_[eqIdx],
"delta_" + std::to_string(eqIdx));
90 writer_.addCellData(def_[eqIdx],
"defect_" + std::to_string(eqIdx));
98 const auto numDofs = gridGeometry_.numDofs();
101 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
103 def_[eqIdx].resize(numDofs);
104 delta_[eqIdx].resize(numDofs);
105 x_[eqIdx].resize(numDofs);
114 void write(
const SolutionVector& uLastIter,
115 const SolutionVector& deltaU,
116 const SolutionVector& residual)
override
118 assert(uLastIter.size() == deltaU.size() && uLastIter.size() == residual.size());
120 for (std::size_t dofIdxGlobal = 0; dofIdxGlobal < deltaU.size(); ++dofIdxGlobal)
122 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
124 x_[eqIdx][dofIdxGlobal] = uLastIter[dofIdxGlobal][eqIdx];
125 delta_[eqIdx][dofIdxGlobal] = - deltaU[dofIdxGlobal][eqIdx];
126 def_[eqIdx][dofIdxGlobal] = residual[dofIdxGlobal][eqIdx];
130 writer_.write(
static_cast<double>(id_) +
static_cast<double>(iteration_)/1000);