void MiscibilityLiveOil::B(const std::vector<PhaseVec>& pressures, const std::vector<CompVec>& surfvol, int phase, std::vector<double>& output) const { ASSERT(pressures.size() == surfvol.size()); int num = pressures.size(); output.resize(num); #pragma omp parallel for for (int i = 0; i < num; ++i) { output[i] = evalB(pressures[i][phase], surfvol[i]); } }
uint8_t readB(){ switch (type){ case A_BYTE: return evalB(); case A_UINT: return evalU(); case A_INT: return evalI(); case A_LONG: return evalL(); case A_FLOAT: return evalF(); case A_DOUBLE: return evalD(); case A_TIME: return evalT(); default: return 0; } return 0; }
uint32_t readT(){ switch (type){ case A_BYTE: return evalB(); case A_UINT: return evalU(); case A_INT: return evalI(); case A_LONG: return evalL(); case A_FLOAT: return evalF(); case A_DOUBLE: return evalD(); case A_TIME: return evalT(); case A_STRING: return 0; case BAD_TYPE: return 0; } return 0; }
void MiscibilityLiveOil::evalBDeriv(const double press, const surfvol_t& surfvol, double& B, double& dBdp) const { B = evalB(press, surfvol); dBdp = -B*B*miscible_oil(press, surfvol, 1, true); }
double MiscibilityLiveOil::dBdp(int /*region*/, double press, const surfvol_t& surfvol) const { // if (surfvol[Liquid] == 0.0) return 0.0; // To handle no-oil case. double Bo = evalB(press, surfvol); // \TODO check if we incur virtual call overhead here. return -Bo*Bo*miscible_oil(press, surfvol, 1, true); }
double MiscibilityLiveOil::B(int /*region*/, double press, const surfvol_t& surfvol) const { return evalB(press, surfvol); }