57 const std::string& name =
"newton_convergence")
58 : gridGeometry_(gridGeometry)
59 , writer_(gridGeometry.gridView(), name,
"",
"")
65 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
67 writer_.addVertexData(x_[eqIdx],
"x_" + std::to_string(eqIdx));
68 writer_.addVertexData(delta_[eqIdx],
"delta_" + std::to_string(eqIdx));
69 writer_.addVertexData(def_[eqIdx],
"defect_" + std::to_string(eqIdx));
74 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
76 writer_.addCellData(x_[eqIdx],
"x_" + std::to_string(eqIdx));
77 writer_.addCellData(delta_[eqIdx],
"delta_" + std::to_string(eqIdx));
78 writer_.addCellData(def_[eqIdx],
"defect_" + std::to_string(eqIdx));
86 const auto numDofs = gridGeometry_.numDofs();
89 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
91 def_[eqIdx].resize(numDofs);
92 delta_[eqIdx].resize(numDofs);
93 x_[eqIdx].resize(numDofs);
102 void write(
const SolutionVector& uLastIter,
103 const ResidualVector& deltaU,
104 const ResidualVector& residual)
override
106 assert(uLastIter.size() == deltaU.size() && uLastIter.size() == residual.size());
108 for (std::size_t dofIdxGlobal = 0; dofIdxGlobal < deltaU.size(); ++dofIdxGlobal)
110 for (
int eqIdx = 0; eqIdx < numEq; ++eqIdx)
112 x_[eqIdx][dofIdxGlobal] = uLastIter[dofIdxGlobal][eqIdx];
113 delta_[eqIdx][dofIdxGlobal] = - deltaU[dofIdxGlobal][eqIdx];
114 def_[eqIdx][dofIdxGlobal] = residual[dofIdxGlobal][eqIdx];
118 writer_.write(
static_cast<double>(id_) +
static_cast<double>(iteration_)/1000);