void restoreTemperatureData(const ecl_file_type* file, EclipseStateConstPtr eclipse_state, int numcells, SimulatorState& simulator_state) { const char* temperature = "TEMP"; if (ecl_file_has_kw(file , temperature)) { ecl_kw_type* temperature_kw = ecl_file_iget_named_kw(file, temperature, 0); if (ecl_kw_get_size(temperature_kw) != numcells) { throw std::runtime_error("Read of restart file: Could not restore temperature data, length of data from file not equal number of cells"); } float* temperature_data = ecl_kw_get_float_ptr(temperature_kw); // factor and offset from the temperature values given in the deck to Kelvin double scaling = eclipse_state->getDeckUnitSystem().parse("Temperature")->getSIScaling(); double offset = eclipse_state->getDeckUnitSystem().parse("Temperature")->getSIOffset(); for (size_t index = 0; index < simulator_state.temperature().size(); ++index) { simulator_state.temperature()[index] = unit::convert::from((double)temperature_data[index] - offset, scaling); } } else { throw std::runtime_error("Read of restart file: File does not contain TEMP data\n"); } }
bool SimulatorState::equals (const SimulatorState& other, double epsilon) const { bool equal = (num_phases_ == other.num_phases_); // if we use &=, then all the tests will be run regardless equal = equal && vectorApproxEqual( pressure() , other.pressure() , epsilon); equal = equal && vectorApproxEqual( temperature() , other.temperature() , epsilon); equal = equal && vectorApproxEqual( facepressure() , other.facepressure() , epsilon); equal = equal && vectorApproxEqual( faceflux() , other.faceflux() , epsilon); equal = equal && vectorApproxEqual( saturation() , other.saturation() , epsilon); return equal; }