static Scalar calculateDefect_(const FluidState ¶ms, int phaseIdx, const ComponentVector &targetFug) { Scalar result = 0.0; for (int i = 0; i < numComponents; ++i) { // sum of the fugacity defect weighted by the inverse // fugacity coefficient result += std::abs( (targetFug[i] - params.fugacity(phaseIdx, i)) / params.fugacityCoefficient(phaseIdx, i) ); }; return result; }
static void solve(FluidState& fluidState, typename FluidSystem::template ParameterCache<typename FluidState::Scalar>& paramCache, unsigned refPhaseIdx, bool setViscosity, bool setEnthalpy) { typedef MathToolbox<typename FluidState::Scalar> FsToolbox; // compute the density and enthalpy of the // reference phase paramCache.updatePhase(fluidState, refPhaseIdx); fluidState.setDensity(refPhaseIdx, FluidSystem::density(fluidState, paramCache, refPhaseIdx)); if (setEnthalpy) fluidState.setEnthalpy(refPhaseIdx, FluidSystem::enthalpy(fluidState, paramCache, refPhaseIdx)); if (setViscosity) fluidState.setViscosity(refPhaseIdx, FluidSystem::viscosity(fluidState, paramCache, refPhaseIdx)); // compute the fugacities of all components in the reference phase for (unsigned compIdx = 0; compIdx < numComponents; ++compIdx) { fluidState.setFugacityCoefficient(refPhaseIdx, compIdx, FluidSystem::fugacityCoefficient(fluidState, paramCache, refPhaseIdx, compIdx)); } // compute all quantities for the non-reference phases for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) { if (phaseIdx == refPhaseIdx) continue; // reference phase is already calculated ComponentVector fugVec; for (unsigned compIdx = 0; compIdx < numComponents; ++compIdx) { const auto& fug = fluidState.fugacity(refPhaseIdx, compIdx); fugVec[compIdx] = FsToolbox::template decay<Evaluation>(fug); } CompositionFromFugacities::solve(fluidState, paramCache, phaseIdx, fugVec); if (setViscosity) fluidState.setViscosity(phaseIdx, FluidSystem::viscosity(fluidState, paramCache, phaseIdx)); if (setEnthalpy) fluidState.setEnthalpy(phaseIdx, FluidSystem::enthalpy(fluidState, paramCache, phaseIdx)); } }