27 #ifndef OPM_VTK_BLACK_OIL_MODULE_HPP 28 #define OPM_VTK_BLACK_OIL_MODULE_HPP 30 #include <dune/common/fvector.hh> 32 #include <opm/material/densead/Math.hpp> 46 #include <type_traits> 55 template <
class TypeTag>
68 static constexpr
auto vtkFormat = getPropValue<TypeTag, Properties::VtkOutputFormat>();
71 enum { oilPhaseIdx = FluidSystem::oilPhaseIdx };
72 enum { gasPhaseIdx = FluidSystem::gasPhaseIdx };
73 enum { waterPhaseIdx = FluidSystem::waterPhaseIdx };
75 enum { gasCompIdx = FluidSystem::gasCompIdx };
76 enum { oilCompIdx = FluidSystem::oilCompIdx };
77 enum { waterCompIdx = FluidSystem::waterCompIdx };
80 using ScalarBuffer =
typename ParentType::ScalarBuffer;
104 if (params_.gasDissolutionFactorOutput_) {
107 if (params_.oilVaporizationFactorOutput_) {
110 if (params_.oilFormationVolumeFactorOutput_) {
113 if (params_.gasFormationVolumeFactorOutput_) {
116 if (params_.waterFormationVolumeFactorOutput_) {
119 if (params_.oilSaturationPressureOutput_) {
122 if (params_.gasSaturationPressureOutput_) {
125 if (params_.saturatedOilGasDissolutionFactorOutput_) {
128 if (params_.saturatedGasOilVaporizationFactorOutput_) {
131 if (params_.saturationRatiosOutput_) {
135 if (params_.primaryVarsMeaningOutput_) {
148 if (!Parameters::Get<Parameters::EnableVtkOutput>()) {
152 for (
unsigned dofIdx = 0; dofIdx < elemCtx.numPrimaryDof(0); ++dofIdx) {
153 const auto& fs = elemCtx.intensiveQuantities(dofIdx, 0).fluidState();
154 using FluidState = std::remove_const_t<std::remove_reference_t<decltype(fs)>>;
155 const unsigned globalDofIdx = elemCtx.globalSpaceIndex(dofIdx, 0);
157 const auto& primaryVars = elemCtx.primaryVars(dofIdx, 0);
159 const unsigned pvtRegionIdx = elemCtx.primaryVars(dofIdx, 0).pvtRegionIndex();
161 FluidSystem::phaseIsActive(oilPhaseIdx)
162 ? std::max(getValue(fs.saturation(oilPhaseIdx)),
163 elemCtx.problem().maxOilSaturation(globalDofIdx))
166 if (FluidSystem::phaseIsActive(gasPhaseIdx) && FluidSystem::phaseIsActive(oilPhaseIdx)) {
167 const Scalar x_oG = getValue(fs.moleFraction(oilPhaseIdx, gasCompIdx));
168 const Scalar x_gO = getValue(fs.moleFraction(gasPhaseIdx, oilCompIdx));
169 const Scalar X_oG = getValue(fs.massFraction(oilPhaseIdx, gasCompIdx));
170 const Scalar X_gO = getValue(fs.massFraction(gasPhaseIdx, oilCompIdx));
171 const Scalar Rs = FluidSystem::convertXoGToRs(X_oG, pvtRegionIdx);
172 const Scalar Rv = FluidSystem::convertXgOToRv(X_gO, pvtRegionIdx);
175 FluidSystem::template saturatedDissolutionFactor<FluidState, Scalar>(fs,
179 const Scalar X_oG_sat = FluidSystem::convertRsToXoG(RsSat, pvtRegionIdx);
180 const Scalar x_oG_sat = FluidSystem::convertXoGToxoG(X_oG_sat, pvtRegionIdx);
183 FluidSystem::template saturatedDissolutionFactor<FluidState, Scalar>(fs,
187 const Scalar X_gO_sat = FluidSystem::convertRvToXgO(RvSat, pvtRegionIdx);
188 const Scalar x_gO_sat = FluidSystem::convertXgOToxgO(X_gO_sat, pvtRegionIdx);
189 if (params_.gasDissolutionFactorOutput_) {
190 gasDissolutionFactor_[globalDofIdx] = Rs;
192 if (params_.oilVaporizationFactorOutput_) {
193 oilVaporizationFactor_[globalDofIdx] = Rv;
195 if (params_.oilSaturationPressureOutput_) {
196 oilSaturationPressure_[globalDofIdx] =
197 FluidSystem::template saturationPressure<FluidState, Scalar>(fs, oilPhaseIdx, pvtRegionIdx);
199 if (params_.gasSaturationPressureOutput_) {
200 gasSaturationPressure_[globalDofIdx] =
201 FluidSystem::template saturationPressure<FluidState, Scalar>(fs, gasPhaseIdx, pvtRegionIdx);
203 if (params_.saturatedOilGasDissolutionFactorOutput_) {
204 saturatedOilGasDissolutionFactor_[globalDofIdx] = RsSat;
206 if (params_.saturatedGasOilVaporizationFactorOutput_) {
207 saturatedGasOilVaporizationFactor_[globalDofIdx] = RvSat;
209 if (params_.saturationRatiosOutput_) {
210 if (x_oG_sat <= 0.0) {
211 oilSaturationRatio_[globalDofIdx] = 1.0;
214 oilSaturationRatio_[globalDofIdx] = x_oG / x_oG_sat;
217 if (x_gO_sat <= 0.0) {
218 gasSaturationRatio_[globalDofIdx] = 1.0;
221 gasSaturationRatio_[globalDofIdx] = x_gO / x_gO_sat;
225 if (params_.oilFormationVolumeFactorOutput_) {
226 oilFormationVolumeFactor_[globalDofIdx] =
227 1.0 / FluidSystem::template inverseFormationVolumeFactor<FluidState, Scalar>(fs, oilPhaseIdx, pvtRegionIdx);
229 if (params_.gasFormationVolumeFactorOutput_) {
230 gasFormationVolumeFactor_[globalDofIdx] =
231 1.0 / FluidSystem::template inverseFormationVolumeFactor<FluidState, Scalar>(fs, gasPhaseIdx, pvtRegionIdx);
233 if (params_.waterFormationVolumeFactorOutput_) {
234 waterFormationVolumeFactor_[globalDofIdx] =
235 1.0 / FluidSystem::template inverseFormationVolumeFactor<FluidState, Scalar>(fs, waterPhaseIdx, pvtRegionIdx);
238 if (params_.primaryVarsMeaningOutput_) {
239 primaryVarsMeaningWater_[globalDofIdx] =
240 static_cast<int>(primaryVars.primaryVarsMeaningWater());
241 primaryVarsMeaningGas_[globalDofIdx] =
242 static_cast<int>(primaryVars.primaryVarsMeaningGas());
243 primaryVarsMeaningPressure_[globalDofIdx] =
244 static_cast<int>(primaryVars.primaryVarsMeaningPressure());
254 if (!dynamic_cast<VtkMultiWriter*>(&baseWriter)) {
258 if (params_.gasDissolutionFactorOutput_) {
260 gasDissolutionFactor_, BufferType::Dof);
262 if (params_.oilVaporizationFactorOutput_) {
264 oilVaporizationFactor_, BufferType::Dof);
266 if (params_.oilFormationVolumeFactorOutput_) {
268 oilFormationVolumeFactor_, BufferType::Dof);
270 if (params_.gasFormationVolumeFactorOutput_) {
272 gasFormationVolumeFactor_, BufferType::Dof);
274 if (params_.waterFormationVolumeFactorOutput_) {
276 waterFormationVolumeFactor_, BufferType::Dof);
278 if (params_.oilSaturationPressureOutput_) {
280 oilSaturationPressure_, BufferType::Dof);
282 if (params_.gasSaturationPressureOutput_) {
284 gasSaturationPressure_, BufferType::Dof);
286 if (params_.saturatedOilGasDissolutionFactorOutput_) {
288 saturatedOilGasDissolutionFactor_, BufferType::Dof);
290 if (params_.saturatedGasOilVaporizationFactorOutput_) {
292 saturatedGasOilVaporizationFactor_, BufferType::Dof);
294 if (params_.saturationRatiosOutput_) {
296 oilSaturationRatio_, BufferType::Dof);
298 gasSaturationRatio_, BufferType::Dof);
301 if (params_.primaryVarsMeaningOutput_) {
303 primaryVarsMeaningWater_, BufferType::Dof);
305 primaryVarsMeaningGas_, BufferType::Dof);
307 primaryVarsMeaningPressure_, BufferType::Dof);
313 ScalarBuffer gasDissolutionFactor_{};
314 ScalarBuffer oilVaporizationFactor_{};
315 ScalarBuffer oilFormationVolumeFactor_{};
316 ScalarBuffer gasFormationVolumeFactor_{};
317 ScalarBuffer waterFormationVolumeFactor_{};
318 ScalarBuffer oilSaturationPressure_{};
319 ScalarBuffer gasSaturationPressure_{};
321 ScalarBuffer saturatedOilGasDissolutionFactor_{};
322 ScalarBuffer saturatedGasOilVaporizationFactor_{};
323 ScalarBuffer oilSaturationRatio_{};
324 ScalarBuffer gasSaturationRatio_{};
326 ScalarBuffer primaryVarsMeaningPressure_{};
327 ScalarBuffer primaryVarsMeaningWater_{};
328 ScalarBuffer primaryVarsMeaningGas_{};
333 #endif // OPM_VTK_BLACK_OIL_MODULE_HPP void commitBuffers(BaseOutputWriter &baseWriter) override
Add all buffers to the VTK output writer.
Definition: vtkblackoilmodule.hpp:252
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(...))
Definition: propertysystem.hh:233
VTK output module for the black oil model's parameters.
void commitScalarBuffer_(BaseOutputWriter &baseWriter, const char *name, ScalarBuffer &buffer, BufferType bufferType)
Add a buffer containing scalar quantities to the result file.
Definition: baseoutputmodule.hh:238
VTK output module for the black oil model's parameters.
Definition: vtkblackoilmodule.hpp:56
This file provides the infrastructure to retrieve run-time parameters.
The base class for writer modules.
Definition: baseoutputmodule.hh:67
The base class for writer modules.
BufferType
Definition: baseoutputmodule.hh:143
Simplifies writing multi-file VTK datasets.
Definition: vtkmultiwriter.hh:64
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
The base class for all output writers.
Definition: baseoutputwriter.hh:45
void processElement(const ElementContext &elemCtx) override
Modify the internal buffers according to the intensive quantities relevant for an element...
Definition: vtkblackoilmodule.hpp:146
Declares the properties required by the black oil model.
void read()
Reads the parameter values from the parameter system.
Definition: vtkblackoilparams.cpp:67
Declare the properties used by the infrastructure code of the finite volume discretizations.
void resizeScalarBuffer_(ScalarBuffer &buffer, BufferType bufferType)
Allocate the space for a buffer storing a scalar quantity.
Definition: baseoutputmodule.hh:157
The Opm property system, traits with inheritance.
Simplifies writing multi-file VTK datasets.
static void registerParameters()
Register all run-time parameters for the multi-phase VTK output module.
Definition: vtkblackoilmodule.hpp:93
Struct holding the parameters for VtkBlackoilOutputModule.
Definition: vtkblackoilparams.hpp:52
static void registerParameters()
Registers the parameters in parameter system.
Definition: vtkblackoilparams.cpp:31
void allocBuffers() override
Allocate memory for the scalar fields we would like to write to the VTK file.
Definition: vtkblackoilmodule.hpp:102