From 5c03f62f94d9a550cb37c0382e3bc178977fe292 Mon Sep 17 00:00:00 2001 From: vishal jambhekar <vishal.jambhekar@iws.uni-stuttgart.de> Date: Mon, 7 May 2012 13:27:50 +0000 Subject: [PATCH] New naminig convention FIRST SESSION 3p3c model git-svn-id: svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk@8235 2fb0f335-1f38-0410-981e-8018bf24f1b0 --- dumux/boxmodels/3p3c/3p3cfluxvariables.hh | 279 ++++++++++---------- dumux/boxmodels/3p3c/3p3cindices.hh | 13 +- dumux/boxmodels/3p3c/3p3clocalresidual.hh | 73 +++-- dumux/boxmodels/3p3c/3p3cmodel.hh | 79 +++--- dumux/boxmodels/3p3c/3p3cvolumevariables.hh | 106 ++++---- 5 files changed, 280 insertions(+), 270 deletions(-) diff --git a/dumux/boxmodels/3p3c/3p3cfluxvariables.hh b/dumux/boxmodels/3p3c/3p3cfluxvariables.hh index 4b948d810e..15f728595f 100644 --- a/dumux/boxmodels/3p3c/3p3cfluxvariables.hh +++ b/dumux/boxmodels/3p3c/3p3cfluxvariables.hh @@ -74,8 +74,8 @@ class ThreePThreeCFluxVariables typedef typename GET_PROP_TYPE(TypeTag, SpatialParameters) SpatialParameters; typedef typename FVElementGeometry::SubControlVolumeFace SCVFace; - typedef Dune::FieldVector<Scalar, dimWorld> Vector; - typedef Dune::FieldMatrix<Scalar, dimWorld, dimWorld> Tensor; + typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition; + typedef Dune::FieldMatrix<Scalar, dim, dim> DimMatrix; typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; enum { @@ -83,9 +83,9 @@ class ThreePThreeCFluxVariables nPhaseIdx = Indices::nPhaseIdx, gPhaseIdx = Indices::gPhaseIdx, - wCompIdx = Indices::wCompIdx, - cCompIdx = Indices::cCompIdx, - aCompIdx = Indices::aCompIdx + comp0Idx = Indices::comp0Idx, + comp1Idx = Indices::comp1Idx, + comp2Idx = Indices::comp2Idx }; public: @@ -94,52 +94,51 @@ public: * * \param problem The problem * \param element The finite element - * \param elemGeom The finite-volume geometry in the box scheme + * \param fvGeometry The finite-volume geometry in the box scheme * \param faceIdx The local index of the SCV (sub-control-volume) face - * \param elemDat The volume variables of the current element + * \param elemVolVars The volume variables of the current element * \param onBoundary A boolean variable to specify whether the flux variables * are calculated for interior SCV faces or boundary faces, default=false */ ThreePThreeCFluxVariables(const Problem &problem, const Element &element, - const FVElementGeometry &elemGeom, - int faceIdx, - const ElementVolumeVariables &elemDat, + const FVElementGeometry &fvGeometry, + const int faceIdx, + const ElementVolumeVariables &elemVolVars, const bool onBoundary = false) - : fvElemGeom_(elemGeom), onBoundary_(onBoundary) + : fvGeometry_(fvGeometry),scvfIdx_(faceIdx), onBoundary_(onBoundary) { - scvfIdx_ = faceIdx; - + //scvfIdx_ = faceIdx; for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) { - densityAtIP_[phaseIdx] = Scalar(0); - molarDensityAtIP_[phaseIdx] = Scalar(0); + density_[phaseIdx] = Scalar(0); + molarDensity_[phaseIdx] = Scalar(0); potentialGrad_[phaseIdx] = Scalar(0); - wConcentrationGrad_[phaseIdx] = Scalar(0); - cConcentrationGrad_[phaseIdx] = Scalar(0); - aConcentrationGrad_[phaseIdx] = Scalar(0); - molarWConcGrad_[phaseIdx] = Scalar(0); - molarCConcGrad_[phaseIdx] = Scalar(0); - molarAConcGrad_[phaseIdx] = Scalar(0); + massFractionGradComp0_[phaseIdx] = Scalar(0); + massFractionGradComp1_[phaseIdx] = Scalar(0); + massFractionGradComp2_[phaseIdx] = Scalar(0); + moleFractionGradComp0_[phaseIdx] = Scalar(0); + moleFractionGradComp1_[phaseIdx] = Scalar(0); + moleFractionGradComp2_[phaseIdx] = Scalar(0); } - calculateGradients_(problem, element, elemDat); - calculateVelocities_(problem, element, elemDat); - calculateDiffCoeffPM_(problem, element, elemDat); + calculateGradients_(problem, element, elemVolVars); + calculateVelocities_(problem, element, elemVolVars); + calculateporousDiffCoeff_(problem, element, elemVolVars); }; private: void calculateGradients_(const Problem &problem, const Element &element, - const ElementVolumeVariables &elemDat) + const ElementVolumeVariables &elemVolVars) { // calculate gradients - Vector tmp(0.0); + GlobalPosition tmp(0.0); for (int idx = 0; - idx < fvElemGeom_.numFAP; + idx < fvGeometry_.numVertices; idx++) // loop over adjacent vertices { // FE gradient at vertex idx - const Vector &feGrad = face().grad[idx]; + const GlobalPosition &feGrad = face().grad[idx]; // index for the element volume variables int volVarsIdx = face().fapIndices[idx]; @@ -149,85 +148,85 @@ private: { // the pressure gradient tmp = feGrad; - tmp *= elemDat[volVarsIdx].pressure(phaseIdx); + tmp *= elemVolVars[idx].pressure(phaseIdx); potentialGrad_[phaseIdx] += tmp; } // the concentration gradient of the components // component in the phases tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(wPhaseIdx, wCompIdx); - wConcentrationGrad_[wPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(wPhaseIdx, comp0Idx); + massFractionGradComp0_[wPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(nPhaseIdx, wCompIdx); - wConcentrationGrad_[nPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(nPhaseIdx, comp0Idx); + massFractionGradComp0_[nPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(gPhaseIdx, wCompIdx); - wConcentrationGrad_[gPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(gPhaseIdx, comp0Idx); + massFractionGradComp0_[gPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(wPhaseIdx, cCompIdx); - cConcentrationGrad_[wPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(wPhaseIdx, comp1Idx); + massFractionGradComp1_[wPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(nPhaseIdx, cCompIdx); - cConcentrationGrad_[nPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(nPhaseIdx, comp1Idx); + massFractionGradComp1_[nPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(gPhaseIdx, cCompIdx); - cConcentrationGrad_[gPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(gPhaseIdx, comp1Idx); + massFractionGradComp1_[gPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(wPhaseIdx, aCompIdx); - aConcentrationGrad_[wPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(wPhaseIdx, comp2Idx); + massFractionGradComp2_[wPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(nPhaseIdx, aCompIdx); - aConcentrationGrad_[nPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(nPhaseIdx, comp2Idx); + massFractionGradComp2_[nPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(gPhaseIdx, aCompIdx); - aConcentrationGrad_[gPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().massFraction(gPhaseIdx, comp2Idx); + massFractionGradComp2_[gPhaseIdx] += tmp; // the molar concentration gradients of the components // in the phases tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(wPhaseIdx, wCompIdx); - molarWConcGrad_[wPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(wPhaseIdx, comp0Idx); + moleFractionGradComp0_[wPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(nPhaseIdx, wCompIdx); - molarWConcGrad_[nPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(nPhaseIdx, comp0Idx); + moleFractionGradComp0_[nPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(gPhaseIdx, wCompIdx); - molarWConcGrad_[gPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(gPhaseIdx, comp0Idx); + moleFractionGradComp0_[gPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(wPhaseIdx, cCompIdx); - molarCConcGrad_[wPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(wPhaseIdx, comp1Idx); + moleFractionGradComp1_[wPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(nPhaseIdx, cCompIdx); - molarCConcGrad_[nPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(nPhaseIdx, comp1Idx); + moleFractionGradComp1_[nPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(gPhaseIdx, cCompIdx); - molarCConcGrad_[gPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(gPhaseIdx, comp1Idx); + moleFractionGradComp1_[gPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(wPhaseIdx, aCompIdx); - molarAConcGrad_[wPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(wPhaseIdx, comp2Idx); + moleFractionGradComp2_[wPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(nPhaseIdx, aCompIdx); - molarAConcGrad_[nPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(nPhaseIdx, comp2Idx); + moleFractionGradComp2_[nPhaseIdx] += tmp; tmp = feGrad; - tmp *= elemDat[volVarsIdx].fluidState().moleFraction(gPhaseIdx, aCompIdx); - molarAConcGrad_[gPhaseIdx] += tmp; + tmp *= elemVolVars[idx].fluidState().moleFraction(gPhaseIdx, comp2Idx); + moleFractionGradComp2_[gPhaseIdx] += tmp; } // correct the pressure gradients by the hydrostatic @@ -236,26 +235,26 @@ private: { int i = face().i; int j = face().j; - Scalar fI = rhoFactor_(phaseIdx, i, elemDat); - Scalar fJ = rhoFactor_(phaseIdx, j, elemDat); + Scalar fI = rhoFactor_(phaseIdx, i, elemVolVars); + Scalar fJ = rhoFactor_(phaseIdx, j, elemVolVars); if (fI + fJ <= 0) fI = fJ = 0.5; // doesn't matter because no phase is // present in both cells! - densityAtIP_[phaseIdx] = - (fI*elemDat[i].density(phaseIdx) + - fJ*elemDat[j].density(phaseIdx)) + density_[phaseIdx] = + (fI*elemVolVars[i].density(phaseIdx) + + fJ*elemVolVars[j].density(phaseIdx)) / (fI + fJ); // phase density - molarDensityAtIP_[phaseIdx] + molarDensity_[phaseIdx] = - (fI*elemDat[i].molarDensity(phaseIdx) + - fJ*elemDat[j].molarDensity(phaseIdx)) + (fI*elemVolVars[i].molarDensity(phaseIdx) + + fJ*elemVolVars[j].molarDensity(phaseIdx)) / (fI + fJ); tmp = problem.gravity(); - tmp *= densityAtIP_[phaseIdx]; + tmp *= density_[phaseIdx]; potentialGrad_[phaseIdx] -= tmp; } @@ -278,20 +277,20 @@ private: void calculateVelocities_(const Problem &problem, const Element &element, - const ElementVolumeVariables &elemDat) + const ElementVolumeVariables &elemVolVars) { - const SpatialParameters &spatialParams = problem.spatialParameters(); + const SpatialParameters &spatialParams = problem.spatialParams(); // multiply the pressure potential with the intrinsic // permeability - Tensor K; + DimMatrix K; for (int phaseIdx=0; phaseIdx < numPhases; phaseIdx++) { spatialParams.meanK(K, spatialParams.intrinsicPermeability(element, - fvElemGeom_, + fvGeometry_, face().i), spatialParams.intrinsicPermeability(element, - fvElemGeom_, + fvGeometry_, face().j)); K.mv(potentialGrad_[phaseIdx], Kmvp_[phaseIdx]); KmvpNormal_[phaseIdx] = - (Kmvp_[phaseIdx] * face().normal); @@ -310,16 +309,16 @@ private: } } - void calculateDiffCoeffPM_(const Problem &problem, + void calculateporousDiffCoeff_(const Problem &problem, const Element &element, - const ElementVolumeVariables &elemDat) + const ElementVolumeVariables &elemVolVars) { - const VolumeVariables &vDat_i = elemDat[face().i]; - const VolumeVariables &vDat_j = elemDat[face().j]; + const VolumeVariables &volVarsI = elemVolVars[face().i]; + const VolumeVariables &volVarsJ = elemVolVars[face().j]; - Dune::FieldMatrix<Scalar, numPhases, numComponents> diffusionCoefficientMatrix_i = vDat_i.diffusionCoefficient(); - Dune::FieldMatrix<Scalar, numPhases, numComponents> diffusionCoefficientMatrix_j = vDat_j.diffusionCoefficient(); + Dune::FieldMatrix<Scalar, numPhases, numComponents> diffusionCoefficientMatrix_i = volVarsI.diffusionCoefficient(); + Dune::FieldMatrix<Scalar, numPhases, numComponents> diffusionCoefficientMatrix_j = volVarsJ.diffusionCoefficient(); for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) { @@ -328,33 +327,33 @@ private: /* \todo take care: This should be discussed once again * as long as a meaningful value can be found for the required mole fraction * diffusion should work even without this one here */ - if (vDat_i.saturation(phaseIdx) <= 0 || - vDat_j.saturation(phaseIdx) <= 0) + if (volVarsI.saturation(phaseIdx) <= 0 || + volVarsJ.saturation(phaseIdx) <= 0) { - porousDiffCoeff_[phaseIdx][wCompIdx] = 0.0; - porousDiffCoeff_[phaseIdx][cCompIdx] = 0.0; - porousDiffCoeff_[phaseIdx][aCompIdx] = 0.0; + porousDiffCoeff_[phaseIdx][comp0Idx] = 0.0; + porousDiffCoeff_[phaseIdx][comp1Idx] = 0.0; + porousDiffCoeff_[phaseIdx][comp2Idx] = 0.0; continue; } // calculate tortuosity at the nodes i and j needed // for porous media diffusion coefficient - Scalar tau_i = - 1.0/(vDat_i.porosity() * vDat_i.porosity()) * - pow(vDat_i.porosity() * vDat_i.saturation(phaseIdx), 7.0/3); - Scalar tau_j = - 1.0/(vDat_j.porosity() * vDat_j.porosity()) * - pow(vDat_j.porosity() * vDat_j.saturation(phaseIdx), 7.0/3); + Scalar tauI = + 1.0/(volVarsI.porosity() * volVarsI.porosity()) * + pow(volVarsI.porosity() * volVarsI.saturation(phaseIdx), 7.0/3); + Scalar tauJ = + 1.0/(volVarsJ.porosity() * volVarsJ.porosity()) * + pow(volVarsJ.porosity() * volVarsJ.saturation(phaseIdx), 7.0/3); // Diffusion coefficient in the porous medium // -> harmonic mean - porousDiffCoeff_[phaseIdx][wCompIdx] = harmonicMean(vDat_i.porosity() * vDat_i.saturation(phaseIdx) * tau_i * diffusionCoefficientMatrix_i[phaseIdx][wCompIdx], - vDat_j.porosity() * vDat_j.saturation(phaseIdx) * tau_j * diffusionCoefficientMatrix_j[phaseIdx][wCompIdx]); - porousDiffCoeff_[phaseIdx][cCompIdx] = harmonicMean(vDat_i.porosity() * vDat_i.saturation(phaseIdx) * tau_i * diffusionCoefficientMatrix_i[phaseIdx][cCompIdx], - vDat_j.porosity() * vDat_j.saturation(phaseIdx) * tau_j * diffusionCoefficientMatrix_j[phaseIdx][cCompIdx]); - porousDiffCoeff_[phaseIdx][aCompIdx] = harmonicMean(vDat_i.porosity() * vDat_i.saturation(phaseIdx) * tau_i * diffusionCoefficientMatrix_i[phaseIdx][aCompIdx], - vDat_j.porosity() * vDat_j.saturation(phaseIdx) * tau_j * diffusionCoefficientMatrix_j[phaseIdx][aCompIdx]); + porousDiffCoeff_[phaseIdx][comp0Idx] = harmonicMean(volVarsI.porosity() * volVarsI.saturation(phaseIdx) * tauI * diffusionCoefficientMatrix_i[phaseIdx][comp0Idx], + volVarsJ.porosity() * volVarsJ.saturation(phaseIdx) * tauJ * diffusionCoefficientMatrix_j[phaseIdx][comp0Idx]); + porousDiffCoeff_[phaseIdx][comp1Idx] = harmonicMean(volVarsI.porosity() * volVarsI.saturation(phaseIdx) * tauI * diffusionCoefficientMatrix_i[phaseIdx][comp1Idx], + volVarsJ.porosity() * volVarsJ.saturation(phaseIdx) * tauJ * diffusionCoefficientMatrix_j[phaseIdx][comp1Idx]); + porousDiffCoeff_[phaseIdx][comp2Idx] = harmonicMean(volVarsI.porosity() * volVarsI.saturation(phaseIdx) * tauI * diffusionCoefficientMatrix_i[phaseIdx][comp2Idx], + volVarsJ.porosity() * volVarsJ.saturation(phaseIdx) * tauJ * diffusionCoefficientMatrix_j[phaseIdx][comp2Idx]); } } @@ -377,9 +376,9 @@ public: /*! * \brief Return the pressure potential multiplied with the - * intrinsic permeability as vector (for velocity output) + * intrinsic permeability as GlobalPosition (for velocity output) */ - Vector Kmvp(int phaseIdx) const + GlobalPosition Kmvp(int phaseIdx) const { return Kmvp_[phaseIdx]; } /*! @@ -406,67 +405,79 @@ public: * \brief Return density \f$\mathrm{[kg/m^3]}\f$ of a phase at the integration * point. */ + DUMUX_DEPRECATED_MSG("use density instead") Scalar densityAtIP(int phaseIdx) const - { return densityAtIP_[phaseIdx]; } + { + density(phaseIdx); + } + + /*! + * \brief Return density \f$\mathrm{[kg/m^3]}\f$ of a phase. + */ + Scalar density(int phaseIdx) const + { return density_[phaseIdx]; } /*! * \brief Return molar density \f$\mathrm{[mol/m^3]}\f$ of a phase at the integration * point. */ + DUMUX_DEPRECATED_MSG("use molarDensity instead") Scalar molarDensityAtIP(int phaseIdx) const - { return molarDensityAtIP_[phaseIdx]; } + { + molarDensity(phaseIdx); + } + /*! + * \brief Return molar density \f$\mathrm{[mol/m^3]}\f$ of a phase. + */ + Scalar molarDensity(int phaseIdx) const + { return molarDensity_[phaseIdx]; } /*! * \brief The concentration gradients of the components in a phase. */ - const Vector &wConcentrationGrad(int phaseIdx) const - { return wConcentrationGrad_[phaseIdx]; }; + const GlobalPosition &wmassFractionGrad(int phaseIdx) const + { return massFractionGradComp0_[phaseIdx]; }; - const Vector &cConcentrationGrad(int phaseIdx) const - { return cConcentrationGrad_[phaseIdx]; }; + const GlobalPosition &nmassFractionGrad(int phaseIdx) const + { return massFractionGradComp1_[phaseIdx]; }; - const Vector &aConcentrationGrad(int phaseIdx) const - { return aConcentrationGrad_[phaseIdx]; }; + const GlobalPosition &amassFractionGrad(int phaseIdx) const + { return massFractionGradComp2_[phaseIdx]; }; /*! * \brief The molar concentration gradients of the components in a phase. */ - const Vector &molarWConcGrad(int phaseIdx) const - { return molarWConcGrad_[phaseIdx]; }; + const GlobalPosition &wmoleFractionGrad(int phaseIdx) const + { return moleFractionGradComp0_[phaseIdx]; }; - const Vector &molarCConcGrad(int phaseIdx) const - { return molarCConcGrad_[phaseIdx]; }; + const GlobalPosition &nmoleFractionGrad(int phaseIdx) const + { return moleFractionGradComp1_[phaseIdx]; }; - const Vector &molarAConcGrad(int phaseIdx) const - { return molarAConcGrad_[phaseIdx]; }; + const GlobalPosition &amoleFractionGrad(int phaseIdx) const + { return moleFractionGradComp2_[phaseIdx]; }; const SCVFace &face() const - { - if (onBoundary_) - return fvElemGeom_.boundaryFace[scvfIdx_]; - else - return fvElemGeom_.subContVolFace[scvfIdx_]; - } + { return fvGeometry_.subContVolFace[scvfIdx_]; } protected: - const FVElementGeometry &fvElemGeom_; + const FVElementGeometry &fvGeometry_; int scvfIdx_; const bool onBoundary_; // gradients - Vector potentialGrad_[numPhases]; - Vector wConcentrationGrad_[numPhases]; - Vector cConcentrationGrad_[numPhases]; - Vector aConcentrationGrad_[numPhases]; - Vector molarWConcGrad_[numPhases]; - Vector molarCConcGrad_[numPhases]; - Vector molarAConcGrad_[numPhases]; + GlobalPosition potentialGrad_[numPhases]; + GlobalPosition massFractionGradComp0_[numPhases]; + GlobalPosition massFractionGradComp1_[numPhases]; + GlobalPosition massFractionGradComp2_[numPhases]; + GlobalPosition moleFractionGradComp0_[numPhases]; + GlobalPosition moleFractionGradComp1_[numPhases]; + GlobalPosition moleFractionGradComp2_[numPhases]; // density of each face at the integration point - Scalar densityAtIP_[numPhases], molarDensityAtIP_[numPhases]; + Scalar density_[numPhases], molarDensity_[numPhases]; // intrinsic permeability times pressure potential gradient - Vector Kmvp_[numPhases]; + GlobalPosition Kmvp_[numPhases]; // projected on the face normal Scalar KmvpNormal_[numPhases]; diff --git a/dumux/boxmodels/3p3c/3p3cindices.hh b/dumux/boxmodels/3p3c/3p3cindices.hh index b2cac440d2..73083c0491 100644 --- a/dumux/boxmodels/3p3c/3p3cindices.hh +++ b/dumux/boxmodels/3p3c/3p3cindices.hh @@ -53,9 +53,9 @@ public: static const int gPhaseIdx = FluidSystem::gPhaseIdx; //!< Index of the gas phase // Component indices - static const int wCompIdx = 0; //!< Index of the water component - static const int cCompIdx = 1; //!< Index of the NAPL component - static const int aCompIdx = 2; //!< Index of the air component + static const int comp0Idx = 0; //!< Index of the water component + static const int comp1Idx = 1; //!< Index of the NAPL component + static const int comp2Idx = 2; //!< Index of the gas component // present phases (-> 'pseudo' primary variable) static const int threePhases = 1; //!< All three phases are present @@ -75,10 +75,9 @@ public: static const int SOrX2Idx = switch2Idx; //!< Index of the either the saturation of the gas phase or the mass fraction secondary component if a phase is not present // equation indices - static const int conti0EqIdx = PVOffset; //!< Index of the mass conservation equation for the first component - static const int contiWEqIdx = conti0EqIdx + wCompIdx; //!< Index of the mass conservation equation for the water component - static const int contiCEqIdx = conti0EqIdx + cCompIdx; //!< Index of the mass conservation equation for the contaminant component - static const int contiAEqIdx = conti0EqIdx + aCompIdx; //!< Index of the mass conservation equation for the air component + static const int conti0EqIdx = PVOffset + comp0Idx; //!< Index of the mass conservation equation for the water component + static const int conti1EqIdx = conti0EqIdx + comp1Idx; //!< Index of the mass conservation equation for the contaminant component + static const int conti2EqIdx = conti0EqIdx + comp2Idx; //!< Index of the mass conservation equation for the gas component }; } diff --git a/dumux/boxmodels/3p3c/3p3clocalresidual.hh b/dumux/boxmodels/3p3c/3p3clocalresidual.hh index 4cf1092bea..594c43a909 100644 --- a/dumux/boxmodels/3p3c/3p3clocalresidual.hh +++ b/dumux/boxmodels/3p3c/3p3clocalresidual.hh @@ -68,18 +68,17 @@ protected: numPhases = GET_PROP_VALUE(TypeTag, NumPhases), numComponents = GET_PROP_VALUE(TypeTag, NumComponents), - conti0EqIdx = Indices::conti0EqIdx, - contiWEqIdx = Indices::contiWEqIdx, - contiCEqIdx = Indices::contiCEqIdx, - contiAEqIdx = Indices::contiAEqIdx, + conti0EqIdx = Indices::conti0EqIdx,//!< Index of the mass conservation equation for the water component + conti1EqIdx = Indices::conti1EqIdx,//!< Index of the mass conservation equation for the contaminant component + conti2EqIdx = Indices::conti2EqIdx,//!< Index of the mass conservation equation for the gas component wPhaseIdx = Indices::wPhaseIdx, nPhaseIdx = Indices::nPhaseIdx, gPhaseIdx = Indices::gPhaseIdx, - wCompIdx = Indices::wCompIdx, - cCompIdx = Indices::cCompIdx, - aCompIdx = Indices::aCompIdx + comp0Idx = Indices::comp0Idx, + comp1Idx = Indices::comp1Idx, + comp2Idx = Indices::comp2Idx }; typedef typename GET_PROP_TYPE(TypeTag, VolumeVariables) VolumeVariables; @@ -135,9 +134,9 @@ public: * \param onBoundary A boolean variable to specify whether the flux variables * are calculated for interior SCV faces or boundary faces, default=false */ - void computeFlux(PrimaryVariables &flux, int faceIdx, const bool onBoundary=false) const + void computeFlux(PrimaryVariables &flux, const int faceIdx,bool onBoundary=false) const { - FluxVariables vars(this->problem_(), + FluxVariables fluxVars(this->problem_(), this->elem_(), this->fvElemGeom_(), faceIdx, @@ -145,8 +144,8 @@ public: onBoundary); flux = 0; - asImp_()->computeAdvectiveFlux(flux, vars); - asImp_()->computeDiffusiveFlux(flux, vars); + asImp_()->computeAdvectiveFlux(flux, fluxVars); + asImp_()->computeDiffusiveFlux(flux, fluxVars); } /*! @@ -154,10 +153,10 @@ public: * a face of a subcontrol volume. * * \param flux The advective flux over the sub-control-volume face for each component - * \param vars The flux variables at the current SCV + * \param fluxVars The flux variables at the current SCV */ - void computeAdvectiveFlux(PrimaryVariables &flux, const FluxVariables &vars) const + void computeAdvectiveFlux(PrimaryVariables &flux, const FluxVariables &fluxVars) const { Scalar massUpwindWeight = GET_PARAM(TypeTag, Scalar, MassUpwindWeight); @@ -168,8 +167,8 @@ public: { // data attached to upstream and the downstream vertices // of the current phase - const VolumeVariables &up = this->curVolVars_(vars.upstreamIdx(phaseIdx)); - const VolumeVariables &dn = this->curVolVars_(vars.downstreamIdx(phaseIdx)); + const VolumeVariables &up = this->curVolVars_(fluxVars.upstreamIdx(phaseIdx)); + const VolumeVariables &dn = this->curVolVars_(fluxVars.downstreamIdx(phaseIdx)); for (int compIdx = 0; compIdx < numComponents; ++compIdx) { @@ -180,7 +179,7 @@ public: // if alpha == 1 (which is mostly the case) then, the downstream // node is not evaluated int eqIdx = conti0EqIdx + compIdx; - flux[eqIdx] += vars.KmvpNormal(phaseIdx) + flux[eqIdx] += fluxVars.KmvpNormal(phaseIdx) * (massUpwindWeight * up.mobility(phaseIdx) * up.fluidState().molarDensity(phaseIdx) @@ -199,39 +198,39 @@ public: * a face of a subcontrol volume. * * \param flux The diffusive flux over the sub-control-volume face for each component - * \param vars The flux variables at the current SCV + * \param fluxVars The flux variables at the current SCV */ - void computeDiffusiveFlux(PrimaryVariables &flux, const FluxVariables &vars) const + void computeDiffusiveFlux(PrimaryVariables &flux, const FluxVariables &fluxVars) const { - // TODO: reference!? Dune::FieldMatrix<Scalar, numPhases, numComponents> averagedPorousDiffCoeffMatrix = vars.porousDiffCoeff(); + // TODO: reference!? Dune::FieldMatrix<Scalar, numPhases, numComponents> averagedPorousDiffCoeffMatrix = fluxVars.porousDiffCoeff(); // add diffusive flux of gas component in liquid phase - Scalar tmp = - vars.porousDiffCoeff()[wPhaseIdx][aCompIdx] * vars.molarDensityAtIP(wPhaseIdx); - tmp *= (vars.molarAConcGrad(wPhaseIdx) * vars.face().normal); + Scalar tmp = - fluxVars.porousDiffCoeff()[wPhaseIdx][comp2Idx] * fluxVars.molarDensity(wPhaseIdx); + tmp *= (fluxVars.amoleFractionGrad(wPhaseIdx) * fluxVars.face().normal); Scalar jAW = tmp; - tmp = - vars.porousDiffCoeff()[wPhaseIdx][cCompIdx] * vars.molarDensityAtIP(wPhaseIdx); - tmp *= (vars.molarCConcGrad(wPhaseIdx) * vars.face().normal); + tmp = - fluxVars.porousDiffCoeff()[wPhaseIdx][comp1Idx] * fluxVars.molarDensity(wPhaseIdx); + tmp *= (fluxVars.nmoleFractionGrad(wPhaseIdx) * fluxVars.face().normal); Scalar jCW = tmp; Scalar jWW = -(jAW+jCW); - tmp = - vars.porousDiffCoeff()[gPhaseIdx][wCompIdx] * vars.molarDensityAtIP(gPhaseIdx); - tmp *= (vars.molarWConcGrad(gPhaseIdx) * vars.face().normal); + tmp = - fluxVars.porousDiffCoeff()[gPhaseIdx][comp0Idx] * fluxVars.molarDensity(gPhaseIdx); + tmp *= (fluxVars.wmoleFractionGrad(gPhaseIdx) * fluxVars.face().normal); Scalar jWG = tmp; - tmp = - vars.porousDiffCoeff()[gPhaseIdx][cCompIdx] * vars.molarDensityAtIP(gPhaseIdx); - tmp *= (vars.molarCConcGrad(gPhaseIdx) * vars.face().normal); + tmp = - fluxVars.porousDiffCoeff()[gPhaseIdx][comp1Idx] * fluxVars.molarDensity(gPhaseIdx); + tmp *= (fluxVars.nmoleFractionGrad(gPhaseIdx) * fluxVars.face().normal); Scalar jCG = tmp; Scalar jAG = -(jWG+jCG); - tmp = - vars.porousDiffCoeff()[nPhaseIdx][wCompIdx] * vars.molarDensityAtIP(nPhaseIdx); - tmp *= (vars.molarWConcGrad(nPhaseIdx) * vars.face().normal); + tmp = - fluxVars.porousDiffCoeff()[nPhaseIdx][comp0Idx] * fluxVars.molarDensity(nPhaseIdx); + tmp *= (fluxVars.wmoleFractionGrad(nPhaseIdx) * fluxVars.face().normal); Scalar jWN = tmp; - tmp = - vars.porousDiffCoeff()[nPhaseIdx][aCompIdx] * vars.molarDensityAtIP(nPhaseIdx); - tmp *= (vars.molarAConcGrad(nPhaseIdx) * vars.face().normal); + tmp = - fluxVars.porousDiffCoeff()[nPhaseIdx][comp2Idx] * fluxVars.molarDensity(nPhaseIdx); + tmp *= (fluxVars.amoleFractionGrad(nPhaseIdx) * fluxVars.face().normal); Scalar jAN = tmp; Scalar jCN = -(jAN+jWN); @@ -248,23 +247,23 @@ public: jAN = 0; */ - flux[contiWEqIdx] += jWW+jWG+jWN; - flux[contiCEqIdx] += jCW+jCG+jCN; - flux[contiAEqIdx] += jAW+jAG+jAN; + flux[conti0EqIdx] += jWW+jWG+jWN; + flux[conti1EqIdx] += jCW+jCG+jCN; + flux[conti2EqIdx] += jAW+jAG+jAN; } /*! * \brief Calculate the source term of the equation * * \param q The source/sink in the SCV for each component - * \param localVertexIdx The index of the SCV + * \param scvIdx The index of the SCV */ - void computeSource(PrimaryVariables &q, int localVertexIdx) + void computeSource(PrimaryVariables &q, int scvIdx) { this->problem_().boxSDSource(q, this->elem_(), this->fvElemGeom_(), - localVertexIdx, + scvIdx, this->curVolVars_()); } diff --git a/dumux/boxmodels/3p3c/3p3cmodel.hh b/dumux/boxmodels/3p3c/3p3cmodel.hh index 3b454ca9c6..f40ef057cd 100644 --- a/dumux/boxmodels/3p3c/3p3cmodel.hh +++ b/dumux/boxmodels/3p3c/3p3cmodel.hh @@ -126,9 +126,9 @@ class ThreePThreeCModel: public GET_PROP_TYPE(TypeTag, BaseModel) nPhaseIdx = Indices::nPhaseIdx, gPhaseIdx = Indices::gPhaseIdx, - wCompIdx = Indices::wCompIdx, - cCompIdx = Indices::cCompIdx, - aCompIdx = Indices::aCompIdx, + comp0Idx = Indices::comp0Idx, + comp1Idx = Indices::comp1Idx, + comp2Idx = Indices::comp2Idx, threePhases = Indices::threePhases, wPhaseOnly = Indices::wPhaseOnly, @@ -307,7 +307,7 @@ public: ScalarField *rank = writer.allocateManagedBuffer (numElements); - FVElementGeometry fvElemGeom; + FVElementGeometry fvGeometry; VolumeVariables volVars; ElementIterator elemIt = this->gridView_().template begin<0>(); @@ -316,7 +316,7 @@ public: { int idx = this->problem_().elementMapper().map(*elemIt); (*rank)[idx] = this->gridView_().comm().rank(); - fvElemGeom.update(this->gridView_(), *elemIt); + fvGeometry.update(this->gridView_(), *elemIt); int numVerts = elemIt->template count<dim> (); for (int i = 0; i < numVerts; ++i) @@ -325,7 +325,7 @@ public: volVars.update(sol[globalIdx], this->problem_(), *elemIt, - fvElemGeom, + fvGeometry, i, false); @@ -438,14 +438,14 @@ public: for (unsigned i = 0; i < staticVertexDat_.size(); ++i) staticVertexDat_[i].visited = false; - FVElementGeometry fvElemGeom; + FVElementGeometry fvGeometry; static VolumeVariables volVars; ElementIterator it = this->gridView_().template begin<0> (); const ElementIterator &endit = this->gridView_().template end<0> (); for (; it != endit; ++it) { - fvElemGeom.update(this->gridView_(), *it); - for (int i = 0; i < fvElemGeom.numSCV; ++i) + fvGeometry.update(this->gridView_(), *it); + for (int i = 0; i < fvGeometry.numVertices; ++i) { int globalIdx = this->vertexMapper().map(*it, i, dim); @@ -456,7 +456,7 @@ public: volVars.update(curGlobalSol[globalIdx], this->problem_(), *it, - fvElemGeom, + fvGeometry, i, false); const GlobalPosition &global = it->geometry().corner(i); @@ -533,7 +533,8 @@ protected: // perform variable switch at a vertex; Returns true if a // variable switch was performed. bool primaryVarSwitch_(SolutionVector &globalSol, - const VolumeVariables &volVars, int globalIdx, + const VolumeVariables &volVars, + int globalIdx, const GlobalPosition &globalPos) { // evaluate primary variable switch @@ -558,7 +559,7 @@ protected: newPhasePresence = wnPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(wPhaseIdx, aCompIdx); + = volVars.fluidState().moleFraction(wPhaseIdx, comp2Idx); } else if (volVars.saturation(wPhaseIdx) <= Smin) { @@ -570,7 +571,7 @@ protected: newPhasePresence = gnPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, wCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp0Idx); } else if (volVars.saturation(nPhaseIdx) <= Smin) { @@ -582,7 +583,7 @@ protected: newPhasePresence = wgPhaseOnly; globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); } } else if (phasePresence == wPhaseOnly) @@ -591,9 +592,9 @@ protected: bool NAPLFlag = 0; // calculate fractions of the partial pressures in the // hypothetical gas phase - Scalar xwg = volVars.fluidState().moleFraction(gPhaseIdx, wCompIdx); - Scalar xag = volVars.fluidState().moleFraction(gPhaseIdx, aCompIdx); - Scalar xcg = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + Scalar xwg = volVars.fluidState().moleFraction(gPhaseIdx, comp0Idx); + Scalar xag = volVars.fluidState().moleFraction(gPhaseIdx, comp2Idx); + Scalar xcg = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); /* take care: for xag in case wPhaseOnly we compute xag=henry_air*xaw for xwg in case wPhaseOnly we compute xwg=pwsat @@ -618,7 +619,7 @@ protected: } // calculate fractions in the hypothetical NAPL phase - Scalar xnc = volVars.fluidState().moleFraction(nPhaseIdx, cCompIdx); + Scalar xnc = volVars.fluidState().moleFraction(nPhaseIdx, comp1Idx); /* take care: for xnc in case wPhaseOnly we compute xnc=henry_mesitylene*xcw, where a hypothetical gas pressure is assumed for the Henry @@ -659,7 +660,7 @@ protected: { newPhasePresence = wnPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(wPhaseIdx, aCompIdx); + = volVars.fluidState().moleFraction(wPhaseIdx, comp2Idx); globalSol[globalIdx][switch2Idx] = 0.0001; } } @@ -684,7 +685,7 @@ protected: // calculate fractions of the hypothetical water phase - Scalar xww = volVars.fluidState().moleFraction(wPhaseIdx, wCompIdx); + Scalar xww = volVars.fluidState().moleFraction(wPhaseIdx, comp0Idx); /* take care:, xww, if no water is present, then take xww=xwg*pg/pwsat . If this is larger than 1, then water appears @@ -717,15 +718,15 @@ protected: newPhasePresence = wgPhaseOnly; globalSol[globalIdx][switch1Idx] = 0.0001; globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); } else if ((waterFlag == 0) && (NAPLFlag == 1)) { newPhasePresence = gPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, wCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp0Idx); globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); } } else if (phasePresence == wnPhaseOnly) @@ -749,9 +750,9 @@ protected: // calculate fractions of the partial pressures in the // hypothetical gas phase - Scalar xwg = volVars.fluidState().moleFraction(gPhaseIdx, wCompIdx); - Scalar xag = volVars.fluidState().moleFraction(gPhaseIdx, aCompIdx); - Scalar xcg = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + Scalar xwg = volVars.fluidState().moleFraction(gPhaseIdx, comp0Idx); + Scalar xag = volVars.fluidState().moleFraction(gPhaseIdx, comp2Idx); + Scalar xcg = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); /* take care: for xag in case wPhaseOnly we compute xag=henry_air*xaw for xwg in case wPhaseOnly we compute xwg=pwsat @@ -785,15 +786,15 @@ protected: newPhasePresence = wgPhaseOnly; globalSol[globalIdx][switch1Idx] = volVars.saturation(wPhaseIdx); globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); } else if ((gasFlag == 0) && (NAPLFlag == 1)) { newPhasePresence = wPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(wPhaseIdx, aCompIdx); + = volVars.fluidState().moleFraction(wPhaseIdx, comp2Idx); globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(wPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(wPhaseIdx, comp1Idx); } } else if (phasePresence == gPhaseOnly) @@ -802,7 +803,7 @@ protected: bool waterFlag = 0; // calculate fractions in the hypothetical NAPL phase - Scalar xnc = volVars.fluidState().moleFraction(nPhaseIdx, cCompIdx); + Scalar xnc = volVars.fluidState().moleFraction(nPhaseIdx, comp1Idx); /* take care:, xnc, if no NAPL phase is there, take xnc=xcg*pg/pcsat if this is larger than 1, then NAPL appears @@ -825,7 +826,7 @@ protected: NAPLFlag = 1; } // calculate fractions of the hypothetical water phase - Scalar xww = volVars.fluidState().moleFraction(wPhaseIdx, wCompIdx); + Scalar xww = volVars.fluidState().moleFraction(wPhaseIdx, comp0Idx); /* take care:, xww, if no water is present, then take xww=xwg*pg/pwsat . If this is larger than 1, then water appears @@ -851,7 +852,7 @@ protected: newPhasePresence = wgPhaseOnly; globalSol[globalIdx][switch1Idx] = 0.0001; globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); } else if ((waterFlag == 1) && (NAPLFlag == 1)) { @@ -863,7 +864,7 @@ protected: { newPhasePresence = gnPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, wCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp0Idx); globalSol[globalIdx][switch2Idx] = 0.0001; } } @@ -874,7 +875,7 @@ protected: bool waterFlag = 0; // get the fractions in the hypothetical NAPL phase - Scalar xnc = volVars.fluidState().moleFraction(nPhaseIdx, cCompIdx); + Scalar xnc = volVars.fluidState().moleFraction(nPhaseIdx, comp1Idx); // take care: if the NAPL phase is not present, take // xnc=xcg*pg/pcsat if this is larger than 1, then NAPL @@ -928,7 +929,7 @@ protected: { newPhasePresence = gnPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, wCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp0Idx); globalSol[globalIdx][switch2Idx] = 0.0001; } else if ((gasFlag == 0) && (NAPLFlag == 1) && (waterFlag == 0)) @@ -941,17 +942,17 @@ protected: { newPhasePresence = wPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(wPhaseIdx, aCompIdx); + = volVars.fluidState().moleFraction(wPhaseIdx, comp2Idx); globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(wPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(wPhaseIdx, comp1Idx); } else if ((gasFlag == 0) && (NAPLFlag == 0) && (waterFlag == 1)) { newPhasePresence = gPhaseOnly; globalSol[globalIdx][switch1Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, wCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp0Idx); globalSol[globalIdx][switch2Idx] - = volVars.fluidState().moleFraction(gPhaseIdx, cCompIdx); + = volVars.fluidState().moleFraction(gPhaseIdx, comp1Idx); } } diff --git a/dumux/boxmodels/3p3c/3p3cvolumevariables.hh b/dumux/boxmodels/3p3c/3p3cvolumevariables.hh index 95d516ab91..497e2e7be4 100644 --- a/dumux/boxmodels/3p3c/3p3cvolumevariables.hh +++ b/dumux/boxmodels/3p3c/3p3cvolumevariables.hh @@ -79,9 +79,9 @@ class ThreePThreeCVolumeVariables : public BoxVolumeVariables<TypeTag> numPhases = GET_PROP_VALUE(TypeTag, NumPhases), numComponents = GET_PROP_VALUE(TypeTag, NumComponents), - wCompIdx = Indices::wCompIdx, - aCompIdx = Indices::aCompIdx, - cCompIdx = Indices::cCompIdx, + comp0Idx = Indices::comp0Idx, + comp2Idx = Indices::comp2Idx, + comp1Idx = Indices::comp1Idx, wPhaseIdx = Indices::wPhaseIdx, gPhaseIdx = Indices::gPhaseIdx, @@ -137,7 +137,7 @@ public: // capillary pressure parameters const MaterialLawParams &materialParams = - problem.spatialParameters().materialLawParams(element, elemGeom, scvIdx); + problem.spatialParams().materialLawParams(element, elemGeom, scvIdx); int globalVertIdx = problem.model().dofMapper().map(element, scvIdx, dim); int phasePresence = problem.model().phasePresence(globalVertIdx, isOldSol); @@ -237,14 +237,14 @@ public: // stored explicitly. // extract mole fractions in the water phase - Scalar xwa = primaryVars[switch1Idx]; - Scalar xwc = primaryVars[switch2Idx]; - Scalar xww = 1 - xwa - xwc; + Scalar xw2 = primaryVars[switch1Idx]; + Scalar xw1 = primaryVars[switch2Idx]; + Scalar xw0 = 1 - xw2 - xw1; // write water mole fractions in the fluid state - fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww); - fluidState_.setMoleFraction(wPhaseIdx, aCompIdx, xwa); - fluidState_.setMoleFraction(wPhaseIdx, cCompIdx, xwc); + fluidState_.setMoleFraction(wPhaseIdx, comp0Idx, xw0); + fluidState_.setMoleFraction(wPhaseIdx, comp2Idx, xw2); + fluidState_.setMoleFraction(wPhaseIdx, comp1Idx, xw1); // calculate the composition of the remaining phases (as // well as the densities of all phases). this is the job @@ -264,16 +264,16 @@ public: // we have all (partly hypothetical) phase pressures // and temperature and the mole fraction of water in // the gas phase - Scalar partPressNAPL = fluidState_.fugacityCoefficient(nPhaseIdx, cCompIdx)*pn_; + Scalar partPressNAPL = fluidState_.fugacityCoefficient(nPhaseIdx, comp1Idx)*pn_; - Scalar xgw = primaryVars[switch1Idx]; - Scalar xgc = partPressNAPL/pg_; - Scalar xga = 1.-xgw-xgc; + Scalar xg0 = primaryVars[switch1Idx]; + Scalar xg1 = partPressNAPL/pg_; + Scalar xg2 = 1.-xg0-xg1; // write mole fractions in the fluid state - fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw); - fluidState_.setMoleFraction(gPhaseIdx, aCompIdx, xga); - fluidState_.setMoleFraction(gPhaseIdx, cCompIdx, xgc); + fluidState_.setMoleFraction(gPhaseIdx, comp0Idx, xg0); + fluidState_.setMoleFraction(gPhaseIdx, comp2Idx, xg2); + fluidState_.setMoleFraction(gPhaseIdx, comp1Idx, xg1); // calculate the composition of the remaining phases (as // well as the densities of all phases). this is the job @@ -286,17 +286,17 @@ public: } else if (phasePresence == wnPhaseOnly) { // only water and NAPL phases are present - Scalar pPartialC = fluidState_.fugacityCoefficient(nPhaseIdx,cCompIdx)*pn_; - Scalar henryC = fluidState_.fugacityCoefficient(wPhaseIdx,cCompIdx)*pw_; + Scalar pPartialC = fluidState_.fugacityCoefficient(nPhaseIdx,comp1Idx)*pn_; + Scalar henryC = fluidState_.fugacityCoefficient(wPhaseIdx,comp1Idx)*pw_; - Scalar xwa = primaryVars[switch1Idx]; - Scalar xwc = pPartialC/henryC; - Scalar xww = 1.-xwa-xwc; + Scalar xw2 = primaryVars[switch1Idx]; + Scalar xw1 = pPartialC/henryC; + Scalar xw0 = 1.-xw2-xw1; // write mole fractions in the fluid state - fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww); - fluidState_.setMoleFraction(wPhaseIdx, aCompIdx, xwa); - fluidState_.setMoleFraction(wPhaseIdx, cCompIdx, xwc); + fluidState_.setMoleFraction(wPhaseIdx, comp0Idx, xw0); + fluidState_.setMoleFraction(wPhaseIdx, comp2Idx, xw2); + fluidState_.setMoleFraction(wPhaseIdx, comp1Idx, xw1); // calculate the composition of the remaining phases (as // well as the densities of all phases). this is the job @@ -311,14 +311,14 @@ public: // only the gas phase is present, gas phase composition is // stored explicitly here below. - const Scalar xgw = primaryVars[switch1Idx]; - const Scalar xgc = primaryVars[switch2Idx]; - Scalar xga = 1 - xgw - xgc; + const Scalar xg0 = primaryVars[switch1Idx]; + const Scalar xg1 = primaryVars[switch2Idx]; + Scalar xg2 = 1 - xg0 - xg1; // write mole fractions in the fluid state - fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw); - fluidState_.setMoleFraction(gPhaseIdx, aCompIdx, xga); - fluidState_.setMoleFraction(gPhaseIdx, cCompIdx, xgc); + fluidState_.setMoleFraction(gPhaseIdx, comp0Idx, xg0); + fluidState_.setMoleFraction(gPhaseIdx, comp2Idx, xg2); + fluidState_.setMoleFraction(gPhaseIdx, comp1Idx, xg1); // calculate the composition of the remaining phases (as // well as the densities of all phases). this is the job @@ -331,16 +331,16 @@ public: } else if (phasePresence == wgPhaseOnly) { // only water and gas phases are present - Scalar xgc = primaryVars[switch2Idx]; - Scalar partPressH2O = fluidState_.fugacityCoefficient(wPhaseIdx, wCompIdx)*pw_; + Scalar xg1 = primaryVars[switch2Idx]; + Scalar partPressH2O = fluidState_.fugacityCoefficient(wPhaseIdx, comp0Idx)*pw_; - Scalar xgw = partPressH2O/pg_; - Scalar xga = 1.-xgc-xgw; + Scalar xg0 = partPressH2O/pg_; + Scalar xg2 = 1.-xg1-xg0; // write mole fractions in the fluid state - fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw); - fluidState_.setMoleFraction(gPhaseIdx, aCompIdx, xga); - fluidState_.setMoleFraction(gPhaseIdx, cCompIdx, xgc); + fluidState_.setMoleFraction(gPhaseIdx, comp0Idx, xg0); + fluidState_.setMoleFraction(gPhaseIdx, comp2Idx, xg2); + fluidState_.setMoleFraction(gPhaseIdx, comp1Idx, xg1); // calculate the composition of the remaining phases (as // well as the densities of all phases). this is the job @@ -380,45 +380,45 @@ public: */ // diffusivity coefficents - diffusionCoefficient_[gPhaseIdx][wCompIdx] = + diffusionCoefficient_[gPhaseIdx][comp0Idx] = FluidSystem::diffusionCoefficient(fluidState_, paramCache, gPhaseIdx, - wCompIdx); - diffusionCoefficient_[gPhaseIdx][cCompIdx] = + comp0Idx); + diffusionCoefficient_[gPhaseIdx][comp1Idx] = FluidSystem::diffusionCoefficient(fluidState_, paramCache, gPhaseIdx, - cCompIdx); - diffusionCoefficient_[gPhaseIdx][aCompIdx] = 0.0; // dummy, should not be used ! + comp1Idx); + diffusionCoefficient_[gPhaseIdx][comp2Idx] = 0.0; // dummy, should not be used ! - diffusionCoefficient_[wPhaseIdx][aCompIdx] = + diffusionCoefficient_[wPhaseIdx][comp2Idx] = FluidSystem::diffusionCoefficient(fluidState_, paramCache, wPhaseIdx, - aCompIdx); - diffusionCoefficient_[wPhaseIdx][cCompIdx] = + comp2Idx); + diffusionCoefficient_[wPhaseIdx][comp1Idx] = FluidSystem::diffusionCoefficient(fluidState_, paramCache, wPhaseIdx, - cCompIdx); - diffusionCoefficient_[wPhaseIdx][wCompIdx] = 0.0; // dummy, should not be used ! + comp1Idx); + diffusionCoefficient_[wPhaseIdx][comp0Idx] = 0.0; // dummy, should not be used ! /* no diffusion in NAPL phase considered at the moment */ - diffusionCoefficient_[nPhaseIdx][cCompIdx] = 0.0; - diffusionCoefficient_[nPhaseIdx][wCompIdx] = 0.0; - diffusionCoefficient_[nPhaseIdx][aCompIdx] = 0.0; + diffusionCoefficient_[nPhaseIdx][comp1Idx] = 0.0; + diffusionCoefficient_[nPhaseIdx][comp0Idx] = 0.0; + diffusionCoefficient_[nPhaseIdx][comp2Idx] = 0.0; Valgrind::CheckDefined(diffusionCoefficient_); // porosity - porosity_ = problem.spatialParameters().porosity(element, + porosity_ = problem.spatialParams().porosity(element, elemGeom, scvIdx); Valgrind::CheckDefined(porosity_); // permeability - permeability_ = problem.spatialParameters().intrinsicPermeability(element, + permeability_ = problem.spatialParams().intrinsicPermeability(element, elemGeom, scvIdx); Valgrind::CheckDefined(permeability_); -- GitLab