static Evaluation vaporPressure(const Evaluation& temperature) { typedef MathToolbox<Evaluation> Toolbox; if (temperature > criticalTemperature()) return criticalPressure(); if (temperature < tripleTemperature()) return 0; // N2 is solid: We don't take sublimation into // account // note: this is the ancillary equation given on page 1368 const Evaluation& sigma = 1.0 - temperature/criticalTemperature(); const Evaluation& sqrtSigma = Toolbox::sqrt(sigma); const Scalar N1 = -6.12445284; const Scalar N2 = 1.26327220; const Scalar N3 = -0.765910082; const Scalar N4 = -1.77570564; return criticalPressure() * Toolbox::exp(criticalTemperature()/temperature* (sigma*(N1 + sqrtSigma*N2 + sigma*(sqrtSigma*N3 + sigma*sigma*sigma*N4)))); }
static Evaluation vaporPressure(const Evaluation& T) { typedef Opm::MathToolbox<Evaluation> Toolbox; if (T > criticalTemperature()) return criticalPressure(); if (T < tripleTemperature()) return 0; // water is solid: We don't take sublimation into account static const Scalar n[10] = { 0.11670521452767e4, -0.72421316703206e6, -0.17073846940092e2, 0.12020824702470e5, -0.32325550322333e7, 0.14915108613530e2, -0.48232657361591e4, 0.40511340542057e6, -0.23855557567849, 0.65017534844798e3 }; Evaluation sigma = T + n[8]/(T - n[9]); Evaluation A = (sigma + n[0])*sigma + n[1]; Evaluation B = (n[2]*sigma + n[3])*sigma + n[4]; Evaluation C = (n[5]*sigma + n[6])*sigma + n[7]; Evaluation tmp = 2.0*C/(Toolbox::sqrt(B*B - 4.0*A*C) - B); tmp *= tmp; tmp *= tmp; return 1e6*tmp; }