115 if (params_.extrusionFactorOutput_) {
118 if (params_.pressureOutput_) {
121 if (params_.densityOutput_) {
124 if (params_.saturationOutput_) {
127 if (params_.mobilityOutput_) {
130 if (params_.relativePermeabilityOutput_) {
133 if (params_.viscosityOutput_) {
136 if (params_.averageMolarMassOutput_) {
140 if (params_.porosityOutput_) {
143 if (params_.intrinsicPermeabilityOutput_) {
147 if (params_.velocityOutput_) {
148 size_t nDof = this->simulator_.model().numGridDof();
149 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++ phaseIdx) {
150 velocity_[phaseIdx].resize(nDof);
151 for (
unsigned dofIdx = 0; dofIdx < nDof; ++ dofIdx) {
152 velocity_[phaseIdx][dofIdx].resize(dimWorld);
153 velocity_[phaseIdx][dofIdx] = 0.0;
159 if (params_.potentialGradientOutput_) {
160 size_t nDof = this->simulator_.model().numGridDof();
161 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++ phaseIdx) {
162 potentialGradient_[phaseIdx].resize(nDof);
163 for (
unsigned dofIdx = 0; dofIdx < nDof; ++ dofIdx) {
164 potentialGradient_[phaseIdx][dofIdx].resize(dimWorld);
165 potentialGradient_[phaseIdx][dofIdx] = 0.0;
179 if (!Parameters::Get<Parameters::EnableVtkOutput>()) {
183 const auto& problem = elemCtx.problem();
184 for (
unsigned i = 0; i < elemCtx.numPrimaryDof(0); ++i) {
185 unsigned I = elemCtx.globalSpaceIndex(i, 0);
186 const auto& intQuants = elemCtx.intensiveQuantities(i, 0);
187 const auto& fs = intQuants.fluidState();
189 if (params_.extrusionFactorOutput_) {
190 extrusionFactor_[I] = intQuants.extrusionFactor();
192 if (params_.porosityOutput_) {
193 porosity_[I] = getValue(intQuants.porosity());
196 if (params_.intrinsicPermeabilityOutput_) {
197 const auto& K = problem.intrinsicPermeability(elemCtx, i, 0);
198 for (
unsigned rowIdx = 0; rowIdx < K.rows; ++rowIdx) {
199 for (
unsigned colIdx = 0; colIdx < K.cols; ++colIdx) {
200 intrinsicPermeability_[I][rowIdx][colIdx] = K[rowIdx][colIdx];
205 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
206 if (!FluidSystem::phaseIsActive(phaseIdx)) {
209 if (params_.pressureOutput_) {
210 pressure_[phaseIdx][I] = getValue(fs.pressure(phaseIdx));
212 if (params_.densityOutput_) {
213 density_[phaseIdx][I] = getValue(fs.density(phaseIdx));
215 if (params_.saturationOutput_) {
216 saturation_[phaseIdx][I] = getValue(fs.saturation(phaseIdx));
218 if (params_.mobilityOutput_) {
219 mobility_[phaseIdx][I] = getValue(intQuants.mobility(phaseIdx));
221 if (params_.relativePermeabilityOutput_) {
222 relativePermeability_[phaseIdx][I] = getValue(intQuants.relativePermeability(phaseIdx));
224 if (params_.viscosityOutput_) {
225 viscosity_[phaseIdx][I] = getValue(fs.viscosity(phaseIdx));
227 if (params_.averageMolarMassOutput_) {
228 averageMolarMass_[phaseIdx][I] = getValue(fs.averageMolarMass(phaseIdx));
233 if (params_.potentialGradientOutput_) {
235 for (
unsigned faceIdx = 0; faceIdx < elemCtx.numInteriorFaces(0); ++ faceIdx) {
236 const auto& extQuants = elemCtx.extensiveQuantities(faceIdx, 0);
238 unsigned i = extQuants.interiorIndex();
239 unsigned I = elemCtx.globalSpaceIndex(i, 0);
241 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
242 Scalar weight = extQuants.extrusionFactor();
244 potentialWeight_[phaseIdx][I] += weight;
246 const auto& inputPGrad = extQuants.potentialGrad(phaseIdx);
248 for (
unsigned dimIdx = 0; dimIdx < dimWorld; ++dimIdx) {
249 pGrad[dimIdx] = getValue(inputPGrad[dimIdx])*weight;
251 potentialGradient_[phaseIdx][I] += pGrad;
256 if (params_.velocityOutput_) {
258 for (
unsigned faceIdx = 0; faceIdx < elemCtx.numInteriorFaces(0); ++ faceIdx) {
259 const auto& extQuants = elemCtx.extensiveQuantities(faceIdx, 0);
261 unsigned i = extQuants.interiorIndex();
262 unsigned I = elemCtx.globalSpaceIndex(i, 0);
264 unsigned j = extQuants.exteriorIndex();
265 unsigned J = elemCtx.globalSpaceIndex(j, 0);
267 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
268 Scalar weight = std::max<Scalar>(1e-16,
269 std::abs(getValue(extQuants.volumeFlux(phaseIdx))));
270 Valgrind::CheckDefined(extQuants.extrusionFactor());
271 assert(extQuants.extrusionFactor() > 0);
272 weight *= extQuants.extrusionFactor();
274 const auto& inputV = extQuants.filterVelocity(phaseIdx);
276 for (
unsigned k = 0; k < dimWorld; ++k) {
277 v[k] = getValue(inputV[k]);
279 if (v.two_norm() > 1e-20) {
280 weight /= v.two_norm();
284 velocity_[phaseIdx][I] += v;
285 velocity_[phaseIdx][J] += v;
287 velocityWeight_[phaseIdx][I] += weight;
288 velocityWeight_[phaseIdx][J] += weight;
304 if (params_.extrusionFactorOutput_) {
307 if (params_.pressureOutput_) {
310 if (params_.densityOutput_) {
313 if (params_.saturationOutput_) {
316 if (params_.mobilityOutput_) {
319 if (params_.relativePermeabilityOutput_) {
322 if (params_.viscosityOutput_) {
325 if (params_.averageMolarMassOutput_) {
329 if (params_.porosityOutput_) {
332 if (params_.intrinsicPermeabilityOutput_) {
336 if (params_.velocityOutput_) {
337 size_t numDof = this->simulator_.model().numGridDof();
339 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
342 for (
unsigned i = 0; i < numDof; ++i) {
343 velocity_[phaseIdx][i] /= velocityWeight_[phaseIdx][i];
347 snprintf(name, 512,
"filterVelocity_%s", FluidSystem::phaseName(phaseIdx).data());
349 DiscBaseOutputModule::attachVectorDofData_(baseWriter, velocity_[phaseIdx], name);
353 if (params_.potentialGradientOutput_) {
354 size_t numDof = this->simulator_.model().numGridDof();
356 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
359 for (
unsigned i = 0; i < numDof; ++i) {
360 potentialGradient_[phaseIdx][i] /= potentialWeight_[phaseIdx][i];
364 snprintf(name, 512,
"gradP_%s", FluidSystem::phaseName(phaseIdx).data());
366 DiscBaseOutputModule::attachVectorDofData_(baseWriter,
367 potentialGradient_[phaseIdx],