You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
564 lines
23 KiB
C++
564 lines
23 KiB
C++
#include "nmDataForecast.h"
|
|
|
|
PressureRow::PressureRow() {
|
|
const QStringList timeUnits = (QStringList()
|
|
<< "ms" << "sec" << "min" << "hr" << "day"
|
|
<< "Week" << "week" << "Month" << "month" << "Year" << "year");
|
|
const QStringList pressureUnits = (QStringList()
|
|
<< "MPa" << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2"
|
|
<< "psig" << "bar" << "kPag");
|
|
|
|
duration = nmDataAttribute("Duration", 8760.0, "hr", UNIT_TYPE_TIME, QStringList(), timeUnits);
|
|
pressure = nmDataAttribute("Pressure", 23.046, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
};
|
|
|
|
FlowRow::FlowRow() {
|
|
const QStringList timeUnits = (QStringList()
|
|
<< "ms" << "sec" << "min" << "hr" << "day"
|
|
<< "Week" << "week" << "Month" << "month" << "Year" << "year");
|
|
const QStringList flowRateUnits = (QStringList()
|
|
<< "B/D" << "MMm^3/D" << "Mcf/D" << "Mm^3/D" << "Mm^3/hr" << "U.K. gal/hr" << "U.K. gal/min"
|
|
<< "U.S. gal/hr" << "U.S. gal/min" << "cf/D" << "cf/s"
|
|
<< "cm^3/sec" << "l/min" << "m^3/D" << "m^3/hr" << "m^3/min" << "m^3/sec");
|
|
|
|
duration = nmDataAttribute("Duration", 8760.0, "hr", UNIT_TYPE_TIME, QStringList(), timeUnits);
|
|
q0 = nmDataAttribute("Flow rate", 0.0000, "B/D", UNIT_TYPE_FLOW_RATE, QStringList(), flowRateUnits);
|
|
};
|
|
|
|
ConstantPressure::ConstantPressure()
|
|
: isAbandonmentRate(false)
|
|
, isMaximumRate(false)
|
|
{
|
|
const QStringList pressureUnits = (QStringList()
|
|
<< "MPa" << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2"
|
|
<< "psig" << "bar" << "kPag");
|
|
|
|
const QStringList flowRateUnits = (QStringList()
|
|
<< "B/D" << "MMm^3/D" << "Mcf/D" << "Mm^3/D" << "Mm^3/hr"
|
|
<< "U.K. gal/hr" << "U.K. gal/min" << "U.S. gal/hr" << "U.S. gal/min"
|
|
<< "cf/D" << "cf/s" << "cm^3/sec" << "l/min"
|
|
<< "m^3/D" << "m^3/hr" << "m^3/min" << "m^3/sec");
|
|
|
|
const QStringList timeUnits = (QStringList()
|
|
<< "ms" << "sec" << "min" << "hr" << "day"
|
|
<< "Week" << "week" << "Month" << "month" << "Year" << "year");
|
|
|
|
initialPressure = nmDataAttribute("Initial pressure", 317.958, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
abandonmentRate = nmDataAttribute("Abandonment rate", 0.0, "B/D", UNIT_TYPE_FLOW_RATE, QStringList(), flowRateUnits);
|
|
maximumRate = nmDataAttribute("Maximum rate", 50000.0, "B/D", UNIT_TYPE_FLOW_RATE, QStringList(), flowRateUnits);
|
|
forecastDuration = nmDataAttribute("Forecast duration", 365.0, "day", UNIT_TYPE_TIME, QStringList(), timeUnits);
|
|
producingPressure = nmDataAttribute("Producing pressure", 23.0460, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
}
|
|
|
|
// Getter and Setter for initialPressure
|
|
nmDataAttribute& ConstantPressure::getInitialPressure() {
|
|
return initialPressure;
|
|
}
|
|
|
|
void ConstantPressure::setInitialPressure(const nmDataAttribute& value) {
|
|
initialPressure = value;
|
|
}
|
|
|
|
// Getter and Setter for abandonmentRate
|
|
nmDataAttribute& ConstantPressure::getAbandonmentRate() {
|
|
return abandonmentRate;
|
|
}
|
|
|
|
void ConstantPressure::setAbandonmentRate(const nmDataAttribute& value) {
|
|
abandonmentRate = value;
|
|
}
|
|
|
|
// Getter and Setter for isAbandonmentRate
|
|
bool ConstantPressure::getIsAbandonmentRate() const {
|
|
return isAbandonmentRate;
|
|
}
|
|
|
|
void ConstantPressure::setIsAbandonmentRate(bool value) {
|
|
isAbandonmentRate = value;
|
|
}
|
|
|
|
// Getter and Setter for maximumRate
|
|
nmDataAttribute& ConstantPressure::getMaximumRate() {
|
|
return maximumRate;
|
|
}
|
|
|
|
void ConstantPressure::setMaximumRate(const nmDataAttribute& value) {
|
|
maximumRate = value;
|
|
}
|
|
|
|
// Getter and Setter for isMaximumRate
|
|
bool ConstantPressure::getIsMaximumRate() const {
|
|
return isMaximumRate;
|
|
}
|
|
|
|
void ConstantPressure::setIsMaximumRate(bool value) {
|
|
isMaximumRate = value;
|
|
}
|
|
|
|
// Getter and Setter for forecastDuration
|
|
nmDataAttribute& ConstantPressure::getForecastDuration() {
|
|
return forecastDuration;
|
|
}
|
|
|
|
void ConstantPressure::setForecastDuration(const nmDataAttribute& value) {
|
|
forecastDuration = value;
|
|
}
|
|
|
|
// Getter and Setter for producingPressure
|
|
nmDataAttribute& ConstantPressure::getProducingPressure() {
|
|
return producingPressure;
|
|
}
|
|
|
|
void ConstantPressure::setProducingPressure(const nmDataAttribute& value) {
|
|
producingPressure = value;
|
|
}
|
|
|
|
DecliningPressure::DecliningPressure()
|
|
: isAbandonmentRate(false)
|
|
, isMaximumRate(false)
|
|
{
|
|
const QStringList pressureUnits = (QStringList()
|
|
<< "MPa" << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2"
|
|
<< "psig" << "bar" << "kPag");
|
|
|
|
const QStringList flowRateUnits = (QStringList()
|
|
<< "B/D" << "MMm^3/D" << "Mcf/D" << "Mm^3/D" << "Mm^3/hr"
|
|
<< "U.K. gal/hr" << "U.K. gal/min" << "U.S. gal/hr" << "U.S. gal/min"
|
|
<< "cf/D" << "cf/s" << "cm^3/sec" << "l/min"
|
|
<< "m^3/D" << "m^3/hr" << "m^3/min" << "m^3/sec");
|
|
|
|
const QStringList timeUnits = (QStringList()
|
|
<< "ms" << "sec" << "min" << "hr" << "day"
|
|
<< "Week" << "week" << "Month" << "month" << "Year" << "year");
|
|
|
|
initialPressure = nmDataAttribute("Initial pressure", 317.958, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
abandonmentRate = nmDataAttribute("Abandonment rate", 0.0, "B/D", UNIT_TYPE_FLOW_RATE, QStringList(), flowRateUnits);
|
|
maximumRate = nmDataAttribute("Maximum rate", 50000.0, "B/D", UNIT_TYPE_FLOW_RATE, QStringList(), flowRateUnits);
|
|
forecastDuration = nmDataAttribute("Forecast duration", 365.0, "day", UNIT_TYPE_TIME, QStringList(), timeUnits);
|
|
producingPressureStart = nmDataAttribute("Producing pressure (start)", 23.0460, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
producingPressureEnd = nmDataAttribute("Producing pressure (end)", 20.0, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
pressureChangePeriod = nmDataAttribute("Pressure change period", 30.0, "day", UNIT_TYPE_TIME, QStringList(), timeUnits);
|
|
}
|
|
|
|
// Getter and Setter for initialPressure
|
|
nmDataAttribute& DecliningPressure::getInitialPressure() {
|
|
return initialPressure;
|
|
}
|
|
|
|
void DecliningPressure::setInitialPressure(const nmDataAttribute& value) {
|
|
initialPressure = value;
|
|
}
|
|
|
|
// Getter and Setter for abandonmentRate
|
|
nmDataAttribute& DecliningPressure::getAbandonmentRate() {
|
|
return abandonmentRate;
|
|
}
|
|
|
|
void DecliningPressure::setAbandonmentRate(const nmDataAttribute& value) {
|
|
abandonmentRate = value;
|
|
}
|
|
|
|
// Getter and Setter for isAbandonmentRate
|
|
bool DecliningPressure::getIsAbandonmentRate() const {
|
|
return isAbandonmentRate;
|
|
}
|
|
|
|
void DecliningPressure::setIsAbandonmentRate(bool value) {
|
|
isAbandonmentRate = value;
|
|
}
|
|
|
|
// Getter and Setter for maximumRate
|
|
nmDataAttribute& DecliningPressure::getMaximumRate() {
|
|
return maximumRate;
|
|
}
|
|
|
|
void DecliningPressure::setMaximumRate(const nmDataAttribute& value) {
|
|
maximumRate = value;
|
|
}
|
|
|
|
// Getter and Setter for isMaximumRate
|
|
bool DecliningPressure::getIsMaximumRate() const {
|
|
return isMaximumRate;
|
|
}
|
|
|
|
void DecliningPressure::setIsMaximumRate(bool value) {
|
|
isMaximumRate = value;
|
|
}
|
|
|
|
// Getter and Setter for forecastDuration
|
|
nmDataAttribute& DecliningPressure::getForecastDuration() {
|
|
return forecastDuration;
|
|
}
|
|
|
|
void DecliningPressure::setForecastDuration(const nmDataAttribute& value) {
|
|
forecastDuration = value;
|
|
}
|
|
|
|
// Getter and Setter for producingPressureStart
|
|
nmDataAttribute& DecliningPressure::getProducingPressureStart() {
|
|
return producingPressureStart;
|
|
}
|
|
|
|
void DecliningPressure::setProducingPressureStart(const nmDataAttribute& value) {
|
|
producingPressureStart = value;
|
|
}
|
|
|
|
// Getter and Setter for producingPressureEnd
|
|
nmDataAttribute& DecliningPressure::getProducingPressureEnd() {
|
|
return producingPressureEnd;
|
|
}
|
|
|
|
void DecliningPressure::setProducingPressureEnd(const nmDataAttribute& value) {
|
|
producingPressureEnd = value;
|
|
}
|
|
|
|
// Getter and Setter for pressureChangePeriod
|
|
nmDataAttribute& DecliningPressure::getPressureChangePeriod() {
|
|
return pressureChangePeriod;
|
|
}
|
|
|
|
void DecliningPressure::setPressureChangePeriod(const nmDataAttribute& value) {
|
|
pressureChangePeriod = value;
|
|
}
|
|
|
|
MultiplePressures::MultiplePressures()
|
|
: isAbandonmentRate(false)
|
|
, isMaximumRate(false)
|
|
{
|
|
const QStringList pressureUnits = (QStringList()
|
|
<< "MPa" << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2"
|
|
<< "psig" << "bar" << "kPag");
|
|
|
|
const QStringList flowRateUnits = (QStringList()
|
|
<< "B/D" << "MMm^3/D" << "Mcf/D" << "Mm^3/D" << "Mm^3/hr"
|
|
<< "U.K. gal/hr" << "U.K. gal/min" << "U.S. gal/hr" << "U.S. gal/min"
|
|
<< "cf/D" << "cf/s" << "cm^3/sec" << "l/min"
|
|
<< "m^3/D" << "m^3/hr" << "m^3/min" << "m^3/sec");
|
|
|
|
initialPressure = nmDataAttribute("Initial pressure", 317.958, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
abandonmentRate = nmDataAttribute("Abandonment rate", 0.0, "B/D", UNIT_TYPE_FLOW_RATE, QStringList(), flowRateUnits);
|
|
maximumRate = nmDataAttribute("Maximum rate", 50000.0, "B/D", UNIT_TYPE_FLOW_RATE, QStringList(), flowRateUnits);
|
|
|
|
pressureTable.append(PressureRow());
|
|
}
|
|
|
|
// Getter and Setter for initialPressure
|
|
nmDataAttribute& MultiplePressures::getInitialPressure() {
|
|
return initialPressure;
|
|
}
|
|
|
|
void MultiplePressures::setInitialPressure(const nmDataAttribute& value) {
|
|
initialPressure = value;
|
|
}
|
|
|
|
// Getter and Setter for abandonmentRate
|
|
nmDataAttribute& MultiplePressures::getAbandonmentRate() {
|
|
return abandonmentRate;
|
|
}
|
|
|
|
void MultiplePressures::setAbandonmentRate(const nmDataAttribute& value) {
|
|
abandonmentRate = value;
|
|
}
|
|
|
|
// Getter and Setter for isAbandonmentRate
|
|
bool MultiplePressures::getIsAbandonmentRate() const {
|
|
return isAbandonmentRate;
|
|
}
|
|
void MultiplePressures::setIsAbandonmentRate(bool value) {
|
|
isAbandonmentRate = value;
|
|
}
|
|
|
|
// Getter and Setter for maximumRate
|
|
nmDataAttribute& MultiplePressures::getMaximumRate() {
|
|
return maximumRate;
|
|
}
|
|
|
|
void MultiplePressures::setMaximumRate(const nmDataAttribute& value) {
|
|
maximumRate = value;
|
|
}
|
|
|
|
// Getter and Setter for isMaximumRate
|
|
bool MultiplePressures::getIsMaximumRate() const {
|
|
return isMaximumRate;
|
|
}
|
|
|
|
void MultiplePressures::setIsMaximumRate(bool value) {
|
|
isMaximumRate = value;
|
|
}
|
|
|
|
// Getter/Setter for pressureTable
|
|
QVector<PressureRow>& MultiplePressures::getPressureTable() {
|
|
return pressureTable;
|
|
}
|
|
|
|
void MultiplePressures::setPressureTable(const QVector<PressureRow>& table) {
|
|
pressureTable = table;
|
|
}
|
|
|
|
MultipleRates::MultipleRates()
|
|
{
|
|
const QStringList pressureUnits = (QStringList()
|
|
<< "MPa" << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2"
|
|
<< "psig" << "bar" << "kPag");
|
|
|
|
initialPressure = nmDataAttribute("Initial pressure", 317.958, "psia", UNIT_TYPE_PRESSURE, QStringList(), pressureUnits);
|
|
|
|
flowTable.append(FlowRow());
|
|
}
|
|
|
|
// Getter and Setter for initialPressure
|
|
nmDataAttribute& MultipleRates::getInitialPressure() {
|
|
return initialPressure;
|
|
}
|
|
|
|
void MultipleRates::setInitialPressure(const nmDataAttribute& value) {
|
|
initialPressure = value;
|
|
}
|
|
|
|
// Getter/Setter for flowTable
|
|
QVector<FlowRow>& MultipleRates::getFlowTable() {
|
|
return flowTable;
|
|
}
|
|
|
|
void MultipleRates::setFlowTable(const QVector<FlowRow>& table) {
|
|
flowTable = table;
|
|
}
|
|
|
|
nmDataForecast::nmDataForecast() : currentOption(ConstantPressureOption) {}
|
|
|
|
nmDataForecast::~nmDataForecast() {}
|
|
|
|
nmDataForecast::nmDataForecast(const nmDataForecast& other) {
|
|
*this = other; // ? ? ? ?
|
|
}
|
|
|
|
nmDataForecast& nmDataForecast::operator=(const nmDataForecast& other) {
|
|
if (this != &other) {
|
|
currentOption = other.currentOption;
|
|
constantPressureData = other.constantPressureData;
|
|
decliningPressureData = other.decliningPressureData;
|
|
multiplePressuresData = other.multiplePressuresData;
|
|
multipleRatesData = other.multipleRatesData;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
rapidjson::Value nmDataForecast::ToJsonValue(rapidjson::Document::AllocatorType& allocator) const
|
|
{
|
|
rapidjson::Value root(rapidjson::kObjectType);
|
|
|
|
root.AddMember("ForecastOption", static_cast<int>(currentOption), allocator);
|
|
|
|
if (currentOption == ConstantPressureOption)
|
|
{
|
|
rapidjson::Value cp(rapidjson::kObjectType);
|
|
|
|
cp.AddMember("InitialPressure", constantPressureData.initialPressure.ToJsonValue(allocator), allocator);
|
|
cp.AddMember("AbandonmentRate", constantPressureData.abandonmentRate.ToJsonValue(allocator), allocator);
|
|
cp.AddMember("IsAbandonmentRate", constantPressureData.isAbandonmentRate, allocator);
|
|
cp.AddMember("MaximumRate", constantPressureData.maximumRate.ToJsonValue(allocator), allocator);
|
|
cp.AddMember("IsMaximumRate", constantPressureData.isMaximumRate, allocator);
|
|
cp.AddMember("ForecastDuration", constantPressureData.forecastDuration.ToJsonValue(allocator), allocator);
|
|
cp.AddMember("ProducingPressure", constantPressureData.producingPressure.ToJsonValue(allocator), allocator);
|
|
|
|
root.AddMember("ConstantPressureData", cp, allocator);
|
|
}
|
|
else if (currentOption == DecliningPressureOption)
|
|
{
|
|
rapidjson::Value dp(rapidjson::kObjectType);
|
|
|
|
dp.AddMember("InitialPressure", decliningPressureData.initialPressure.ToJsonValue(allocator), allocator);
|
|
dp.AddMember("AbandonmentRate", decliningPressureData.abandonmentRate.ToJsonValue(allocator), allocator);
|
|
dp.AddMember("IsAbandonmentRate", decliningPressureData.isAbandonmentRate, allocator);
|
|
dp.AddMember("MaximumRate", decliningPressureData.maximumRate.ToJsonValue(allocator), allocator);
|
|
dp.AddMember("IsMaximumRate", decliningPressureData.isMaximumRate, allocator);
|
|
dp.AddMember("ForecastDuration", decliningPressureData.forecastDuration.ToJsonValue(allocator), allocator);
|
|
dp.AddMember("ProducingPressureStart", decliningPressureData.producingPressureStart.ToJsonValue(allocator), allocator);
|
|
dp.AddMember("ProducingPressureEnd", decliningPressureData.producingPressureEnd.ToJsonValue(allocator), allocator);
|
|
dp.AddMember("PressureChangePeriod", decliningPressureData.pressureChangePeriod.ToJsonValue(allocator), allocator);
|
|
|
|
root.AddMember("DecliningPressureData", dp, allocator);
|
|
}
|
|
else if (currentOption == MultiplePressuresOption)
|
|
{
|
|
rapidjson::Value mp(rapidjson::kObjectType);
|
|
|
|
mp.AddMember("InitialPressure", multiplePressuresData.initialPressure.ToJsonValue(allocator), allocator);
|
|
mp.AddMember("AbandonmentRate", multiplePressuresData.abandonmentRate.ToJsonValue(allocator), allocator);
|
|
mp.AddMember("IsAbandonmentRate", multiplePressuresData.isAbandonmentRate, allocator);
|
|
mp.AddMember("MaximumRate", multiplePressuresData.maximumRate.ToJsonValue(allocator), allocator);
|
|
mp.AddMember("IsMaximumRate", multiplePressuresData.isMaximumRate, allocator);
|
|
|
|
// PressureTable:
|
|
rapidjson::Value arr(rapidjson::kArrayType);
|
|
arr.Reserve(static_cast<rapidjson::SizeType>(multiplePressuresData.pressureTable.size()), allocator);
|
|
for (int i = 0; i < multiplePressuresData.pressureTable.size(); ++i) {
|
|
const PressureRow& row = multiplePressuresData.pressureTable[i];
|
|
rapidjson::Value rowObj(rapidjson::kObjectType);
|
|
rowObj.AddMember("Duration", row.duration.ToJsonValue(allocator), allocator);
|
|
rowObj.AddMember("Pressure", row.pressure.ToJsonValue(allocator), allocator);
|
|
arr.PushBack(rowObj, allocator);
|
|
}
|
|
mp.AddMember("PressureTable", arr, allocator);
|
|
|
|
root.AddMember("MultiplePressuresData", mp, allocator);
|
|
}
|
|
else if (currentOption == MultipleRatesOption)
|
|
{
|
|
rapidjson::Value mr(rapidjson::kObjectType);
|
|
|
|
mr.AddMember("InitialPressure", multipleRatesData.initialPressure.ToJsonValue(allocator), allocator);
|
|
|
|
// FlowTable:
|
|
rapidjson::Value arr(rapidjson::kArrayType);
|
|
arr.Reserve(static_cast<rapidjson::SizeType>(multipleRatesData.flowTable.size()), allocator);
|
|
for (int i = 0; i < multipleRatesData.flowTable.size(); ++i) {
|
|
const FlowRow& row = multipleRatesData.flowTable[i];
|
|
rapidjson::Value rowObj(rapidjson::kObjectType);
|
|
rowObj.AddMember("Duration", row.duration.ToJsonValue(allocator), allocator);
|
|
rowObj.AddMember("Q0", row.q0.ToJsonValue(allocator), allocator);
|
|
arr.PushBack(rowObj, allocator);
|
|
}
|
|
mr.AddMember("FlowTable", arr, allocator);
|
|
|
|
root.AddMember("MultipleRatesData", mr, allocator);
|
|
}
|
|
|
|
return root;
|
|
}
|
|
|
|
void nmDataForecast::FromJsonValue(const rapidjson::Value& jsonValue)
|
|
{
|
|
if (!jsonValue.IsObject())
|
|
return;
|
|
|
|
if (jsonValue.HasMember("ForecastOption"))
|
|
currentOption = static_cast<ForecastOption>(jsonValue["ForecastOption"].GetInt());
|
|
|
|
if (currentOption == ConstantPressureOption && jsonValue.HasMember("ConstantPressureData"))
|
|
{
|
|
const rapidjson::Value& cp = jsonValue["ConstantPressureData"];
|
|
if (cp.IsObject())
|
|
{
|
|
if (cp.HasMember("InitialPressure")) constantPressureData.initialPressure.FromJsonValue(cp["InitialPressure"]);
|
|
if (cp.HasMember("AbandonmentRate")) constantPressureData.abandonmentRate.FromJsonValue(cp["AbandonmentRate"]);
|
|
if (cp.HasMember("IsAbandonmentRate")) constantPressureData.isAbandonmentRate = cp["IsAbandonmentRate"].GetBool();
|
|
if (cp.HasMember("MaximumRate")) constantPressureData.maximumRate.FromJsonValue(cp["MaximumRate"]);
|
|
if (cp.HasMember("IsMaximumRate")) constantPressureData.isMaximumRate = cp["IsMaximumRate"].GetBool();
|
|
if (cp.HasMember("ForecastDuration")) constantPressureData.forecastDuration.FromJsonValue(cp["ForecastDuration"]);
|
|
if (cp.HasMember("ProducingPressure")) constantPressureData.producingPressure.FromJsonValue(cp["ProducingPressure"]);
|
|
}
|
|
}
|
|
else if (currentOption == DecliningPressureOption && jsonValue.HasMember("DecliningPressureData"))
|
|
{
|
|
const rapidjson::Value& dp = jsonValue["DecliningPressureData"];
|
|
if (dp.IsObject())
|
|
{
|
|
if (dp.HasMember("InitialPressure")) decliningPressureData.initialPressure.FromJsonValue(dp["InitialPressure"]);
|
|
if (dp.HasMember("AbandonmentRate")) decliningPressureData.abandonmentRate.FromJsonValue(dp["AbandonmentRate"]);
|
|
if (dp.HasMember("IsAbandonmentRate")) decliningPressureData.isAbandonmentRate = dp["IsAbandonmentRate"].GetBool();
|
|
if (dp.HasMember("MaximumRate")) decliningPressureData.maximumRate.FromJsonValue(dp["MaximumRate"]);
|
|
if (dp.HasMember("IsMaximumRate")) decliningPressureData.isMaximumRate = dp["IsMaximumRate"].GetBool();
|
|
if (dp.HasMember("ForecastDuration")) decliningPressureData.forecastDuration.FromJsonValue(dp["ForecastDuration"]);
|
|
if (dp.HasMember("ProducingPressureStart")) decliningPressureData.producingPressureStart.FromJsonValue(dp["ProducingPressureStart"]);
|
|
if (dp.HasMember("ProducingPressureEnd")) decliningPressureData.producingPressureEnd.FromJsonValue(dp["ProducingPressureEnd"]);
|
|
if (dp.HasMember("PressureChangePeriod")) decliningPressureData.pressureChangePeriod.FromJsonValue(dp["PressureChangePeriod"]);
|
|
}
|
|
}
|
|
else if (currentOption == MultiplePressuresOption && jsonValue.HasMember("MultiplePressuresData"))
|
|
{
|
|
const rapidjson::Value& mp = jsonValue["MultiplePressuresData"];
|
|
if (mp.IsObject())
|
|
{
|
|
if (mp.HasMember("InitialPressure")) multiplePressuresData.initialPressure.FromJsonValue(mp["InitialPressure"]);
|
|
if (mp.HasMember("AbandonmentRate")) multiplePressuresData.abandonmentRate.FromJsonValue(mp["AbandonmentRate"]);
|
|
if (mp.HasMember("IsAbandonmentRate")) multiplePressuresData.isAbandonmentRate = mp["IsAbandonmentRate"].GetBool();
|
|
if (mp.HasMember("MaximumRate")) multiplePressuresData.maximumRate.FromJsonValue(mp["MaximumRate"]);
|
|
if (mp.HasMember("IsMaximumRate")) multiplePressuresData.isMaximumRate = mp["IsMaximumRate"].GetBool();
|
|
|
|
multiplePressuresData.pressureTable.clear();
|
|
if (mp.HasMember("PressureTable") && mp["PressureTable"].IsArray())
|
|
{
|
|
const auto& arr = mp["PressureTable"].GetArray();
|
|
multiplePressuresData.pressureTable.reserve(static_cast<int>(arr.Size()));
|
|
for (rapidjson::SizeType i = 0; i < arr.Size(); ++i)
|
|
{
|
|
const rapidjson::Value& rowObj = arr[i];
|
|
if (!rowObj.IsObject()) continue;
|
|
|
|
PressureRow row;
|
|
if (rowObj.HasMember("Duration")) row.duration.FromJsonValue(rowObj["Duration"]);
|
|
if (rowObj.HasMember("Pressure")) row.pressure.FromJsonValue(rowObj["Pressure"]);
|
|
multiplePressuresData.pressureTable.push_back(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (currentOption == MultipleRatesOption && jsonValue.HasMember("MultipleRatesData"))
|
|
{
|
|
const rapidjson::Value& mr = jsonValue["MultipleRatesData"];
|
|
if (mr.IsObject())
|
|
{
|
|
if (mr.HasMember("InitialPressure")) multipleRatesData.initialPressure.FromJsonValue(mr["InitialPressure"]);
|
|
|
|
multipleRatesData.flowTable.clear();
|
|
if (mr.HasMember("FlowTable") && mr["FlowTable"].IsArray())
|
|
{
|
|
const auto& arr = mr["FlowTable"].GetArray();
|
|
multipleRatesData.flowTable.reserve(static_cast<int>(arr.Size()));
|
|
for (rapidjson::SizeType i = 0; i < arr.Size(); ++i)
|
|
{
|
|
const rapidjson::Value& rowObj = arr[i];
|
|
if (!rowObj.IsObject()) continue;
|
|
|
|
FlowRow row;
|
|
if (rowObj.HasMember("Duration")) row.duration.FromJsonValue(rowObj["Duration"]);
|
|
if (rowObj.HasMember("Q0")) row.q0.FromJsonValue(rowObj["Q0"]);
|
|
multipleRatesData.flowTable.push_back(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void nmDataForecast::setForecastOption(ForecastOption option) {
|
|
currentOption = option;
|
|
}
|
|
|
|
nmDataForecast::ForecastOption nmDataForecast::getForecastOption() const {
|
|
return currentOption;
|
|
}
|
|
|
|
void nmDataForecast::setConstantPressureData(const ConstantPressure& cp) {
|
|
constantPressureData = cp;
|
|
}
|
|
|
|
ConstantPressure& nmDataForecast::getConstantPressureData() {
|
|
return constantPressureData;
|
|
}
|
|
|
|
void nmDataForecast::setDecliningPressureData(const DecliningPressure& dp) {
|
|
decliningPressureData = dp;
|
|
}
|
|
|
|
DecliningPressure& nmDataForecast::getDecliningPressureData() {
|
|
return decliningPressureData;
|
|
}
|
|
|
|
void nmDataForecast::setMultiplePressuresData(const MultiplePressures& mp) {
|
|
multiplePressuresData = mp;
|
|
}
|
|
|
|
MultiplePressures& nmDataForecast::getMultiplePressuresData() {
|
|
return multiplePressuresData;
|
|
}
|
|
|
|
void nmDataForecast::setMultipleRatesData(const MultipleRates& mp) {
|
|
multipleRatesData = mp;
|
|
}
|
|
|
|
MultipleRates& nmDataForecast::getMultipleRatesData() {
|
|
return multipleRatesData;
|
|
}
|