#include "nmDataMixedResults.h" nmDataMixedResults::nmDataMixedResults() { // Warnings m_criticalParameters = nmDataAttribute("Critical parameters", "Some default values were used!", ""); // Analysis summary m_analysisName = nmDataAttribute("Analysis name", "Analysis 1", ""); m_referenceWell = nmDataAttribute("Reference well", "", ""); m_PVTReferencePhase = nmDataAttribute("PVT Reference phase", "Oil", ""); m_PVTPhases = nmDataAttribute("PVT phases", "Oil", ""); m_activeProduction = nmDataAttribute("Active production", "Oil rate", ""); m_activePressureGauge = nmDataAttribute("Active pressure gauge", "Test Design", ""); m_analysisType = nmDataAttribute("Analysis type", "Standard", ""); m_activeModel = nmDataAttribute("Active model", "Numerical", ""); // Main Results m_source = nmDataAttribute("Source", "Numerical", ""); m_mobility = nmDataAttribute("Mobility", 33.3333, "md/cp"); m_Pbar = nmDataAttribute("Pbar", 4836.51, "psia"); m_productivityIndex = nmDataAttribute("Productivity Index", 0.802362, "[STB/D]/psia"); m_poreVolume = nmDataAttribute("Pore Volume", 54.4323, "MMB"); // Diagnostic m_diagnosticWell = nmDataAttribute("Well", "Finite radius", ""); m_boundary = nmDataAttribute("Boundary", "Infinite", ""); m_referenceRate = nmDataAttribute("Reference rate", 62.8981, "STB/D"); m_extractionStartTime = nmDataAttribute("Extraction start time", 0.0, "hr"); m_PAtDt0 = nmDataAttribute("PAtDt0", 500.0, "psia"); m_timeMatch = nmDataAttribute("Time match", 29.5078, "1/hr"); m_pressureMatch = nmDataAttribute("Pressure match", 0.112593, "1/psia"); m_khMu = nmDataAttribute("khMu", 1000.0, "[md.ft]/cp"); m_deltaPSkin = nmDataAttribute("deltaPSkin", -0.13795, "psia"); // Model description m_otherWellsIncluded = nmDataAttribute("Other wells included?", "No", ""); m_rateDependentSkin = nmDataAttribute("Rate dependent skin?", "No", ""); m_timeDependentSkin = nmDataAttribute("Time dependent skin?", "No", ""); // Model - Contour & faults m_topBoundary = nmDataAttribute("Top boundary", "No flow", ""); m_bottomBoundary = nmDataAttribute("Bottom boundary", "No flow", ""); // Model - Results - Field m_STOIIP = nmDataAttribute("STOIIP", 54.4323, "MMSTB"); m_STOIIPFree = nmDataAttribute("STOIIP (free)", 52.4323, "MMSTB"); m_STOIP = nmDataAttribute("STOIP", 52.4061, "MMSTB"); m_QoTmax = nmDataAttribute("Qo(tmax)", 0.0262075, "MMSTB"); m_Tmax = nmDataAttribute("Tmax", 10000.0, "hr"); m_area = nmDataAttribute("Area", 4836.51, "psia"); m_bulkVolume = nmDataAttribute("Bulk volume", 534.323, "MMB"); // Statistics m_goodnessOfFit = nmDataAttribute("Goodness of fit", 0.0, "psia"); } nmDataMixedResults::nmDataMixedResults(const nmDataMixedResults& other) { *this = other; } nmDataMixedResults::~nmDataMixedResults() { } nmDataMixedResults& nmDataMixedResults::operator=(const nmDataMixedResults& other) { if (this != &other) { // Warnings---提示 m_criticalParameters = other.m_criticalParameters; // Analysis summary---分析总结 m_analysisName = other.m_analysisName; m_referenceWell = other.m_referenceWell; m_PVTReferencePhase = other.m_PVTReferencePhase; m_PVTPhases = other.m_PVTPhases; m_activeProduction = other.m_activeProduction; m_oilRate = other.m_oilRate; m_activePressureGauge = other.m_activePressureGauge; m_analysisType = other.m_analysisType; m_activeModel = other.m_activeModel; // Main Results---主要结果 m_source = other.m_source; m_mobility = other.m_mobility; m_Pbar = other.m_Pbar; m_productivityIndex = other.m_productivityIndex; m_poreVolume = other.m_poreVolume; // Diagnostic---诊断分析 m_diagnosticWell = other.m_diagnosticWell; m_boundary = other.m_boundary; m_referenceRate = other.m_referenceRate; m_extractionStartTime = other.m_extractionStartTime; m_PAtDt0 = other.m_PAtDt0; m_timeMatch = other.m_timeMatch; m_pressureMatch = other.m_pressureMatch; m_khMu = other.m_khMu; m_deltaPSkin = other.m_deltaPSkin; // Model description---模型表征 m_otherWellsIncluded = other.m_otherWellsIncluded; m_rateDependentSkin = other.m_rateDependentSkin; m_timeDependentSkin = other.m_timeDependentSkin; // Model - Contour & faults---模型-边界和断层 m_topBoundary = other.m_topBoundary; m_bottomBoundary = other.m_bottomBoundary; // Model - Results - Field---模型-结果-场 m_STOIIP = other.m_STOIIP; m_STOIIPFree = other.m_STOIIPFree; m_STOIP = other.m_STOIP; m_QoTmax = other.m_QoTmax; m_Tmax = other.m_Tmax; m_area = other.m_area; m_bulkVolume = other.m_bulkVolume; } return *this; } // 序列化 nmDataRegion 为 RapidJSON Value rapidjson::Value nmDataMixedResults::ToJsonValue(rapidjson::Document::AllocatorType& allocator) const { // Create a RapidJSON object type value rapidjson::Value mixedResultsObject(rapidjson::kObjectType); // Serialize nmDataAttribute type members by calling ToJsonValue method of nmDataAttribute recursively mixedResultsObject.AddMember("CriticalParameters", m_criticalParameters.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("AnalysisName", m_analysisName.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("ReferenceWell", m_referenceWell.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("PVTReferencePhase", m_PVTReferencePhase.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("PVTPhases", m_PVTPhases.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("ActiveProduction", m_activeProduction.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("ActivePressureGauge", m_activePressureGauge.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("AnalysisType", m_analysisType.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("ActiveModel", m_activeModel.ToJsonValue(allocator), allocator); // Main Results mixedResultsObject.AddMember("Source", m_source.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("Mobility", m_mobility.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("Pbar", m_Pbar.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("ProductivityIndex", m_productivityIndex.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("PoreVolume", m_poreVolume.ToJsonValue(allocator), allocator); // Diagnostic mixedResultsObject.AddMember("DiagnosticWell", m_diagnosticWell.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("Boundary", m_boundary.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("ReferenceRate", m_referenceRate.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("ExtractionStartTime", m_extractionStartTime.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("PAtDt0", m_PAtDt0.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("TimeMatch", m_timeMatch.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("PressureMatch", m_pressureMatch.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("KhMu", m_khMu.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("DeltaPSkin", m_deltaPSkin.ToJsonValue(allocator), allocator); // Model description mixedResultsObject.AddMember("OtherWellsIncluded", m_otherWellsIncluded.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("RateDependentSkin", m_rateDependentSkin.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("TimeDependentSkin", m_timeDependentSkin.ToJsonValue(allocator), allocator); // Model - Contour & faults mixedResultsObject.AddMember("TopBoundary", m_topBoundary.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("BottomBoundary", m_bottomBoundary.ToJsonValue(allocator), allocator); // Model - Results - Field mixedResultsObject.AddMember("STOIIP", m_STOIIP.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("STOIIPFree", m_STOIIPFree.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("STOIP", m_STOIP.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("QoTmax", m_QoTmax.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("Tmax", m_Tmax.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("Area", m_area.ToJsonValue(allocator), allocator); mixedResultsObject.AddMember("BulkVolume", m_bulkVolume.ToJsonValue(allocator), allocator); // Statistics mixedResultsObject.AddMember("GoodnessOfFit", m_goodnessOfFit.ToJsonValue(allocator), allocator); return mixedResultsObject; // Return the serialized RapidJSON Value } // 从 RapidJSON Value 反序列化数据到 nmDataFault void nmDataMixedResults::FromJsonValue(const rapidjson::Value& jsonValue) { // Deserialize nmDataAttribute type members by calling FromJsonValue method recursively if (jsonValue.HasMember("CriticalParameters") && jsonValue["CriticalParameters"].IsObject()) { m_criticalParameters.FromJsonValue(jsonValue["CriticalParameters"]); } if (jsonValue.HasMember("AnalysisName") && jsonValue["AnalysisName"].IsObject()) { m_analysisName.FromJsonValue(jsonValue["AnalysisName"]); } if (jsonValue.HasMember("ReferenceWell") && jsonValue["ReferenceWell"].IsObject()) { m_referenceWell.FromJsonValue(jsonValue["ReferenceWell"]); } if (jsonValue.HasMember("PVTReferencePhase") && jsonValue["PVTReferencePhase"].IsObject()) { m_PVTReferencePhase.FromJsonValue(jsonValue["PVTReferencePhase"]); } if (jsonValue.HasMember("PVTPhases") && jsonValue["PVTPhases"].IsObject()) { m_PVTPhases.FromJsonValue(jsonValue["PVTPhases"]); } if (jsonValue.HasMember("ActiveProduction") && jsonValue["ActiveProduction"].IsObject()) { m_activeProduction.FromJsonValue(jsonValue["ActiveProduction"]); } if (jsonValue.HasMember("ActivePressureGauge") && jsonValue["ActivePressureGauge"].IsObject()) { m_activePressureGauge.FromJsonValue(jsonValue["ActivePressureGauge"]); } if (jsonValue.HasMember("AnalysisType") && jsonValue["AnalysisType"].IsObject()) { m_analysisType.FromJsonValue(jsonValue["AnalysisType"]); } if (jsonValue.HasMember("ActiveModel") && jsonValue["ActiveModel"].IsObject()) { m_activeModel.FromJsonValue(jsonValue["ActiveModel"]); } // Main Results if (jsonValue.HasMember("Source") && jsonValue["Source"].IsObject()) { m_source.FromJsonValue(jsonValue["Source"]); } if (jsonValue.HasMember("Mobility") && jsonValue["Mobility"].IsObject()) { m_mobility.FromJsonValue(jsonValue["Mobility"]); } if (jsonValue.HasMember("Pbar") && jsonValue["Pbar"].IsObject()) { m_Pbar.FromJsonValue(jsonValue["Pbar"]); } if (jsonValue.HasMember("ProductivityIndex") && jsonValue["ProductivityIndex"].IsObject()) { m_productivityIndex.FromJsonValue(jsonValue["ProductivityIndex"]); } if (jsonValue.HasMember("PoreVolume") && jsonValue["PoreVolume"].IsObject()) { m_poreVolume.FromJsonValue(jsonValue["PoreVolume"]); } // Diagnostic if (jsonValue.HasMember("DiagnosticWell") && jsonValue["DiagnosticWell"].IsObject()) { m_diagnosticWell.FromJsonValue(jsonValue["DiagnosticWell"]); } if (jsonValue.HasMember("Boundary") && jsonValue["Boundary"].IsObject()) { m_boundary.FromJsonValue(jsonValue["Boundary"]); } if (jsonValue.HasMember("ReferenceRate") && jsonValue["ReferenceRate"].IsObject()) { m_referenceRate.FromJsonValue(jsonValue["ReferenceRate"]); } if (jsonValue.HasMember("ExtractionStartTime") && jsonValue["ExtractionStartTime"].IsObject()) { m_extractionStartTime.FromJsonValue(jsonValue["ExtractionStartTime"]); } if (jsonValue.HasMember("PAtDt0") && jsonValue["PAtDt0"].IsObject()) { m_PAtDt0.FromJsonValue(jsonValue["PAtDt0"]); } if (jsonValue.HasMember("TimeMatch") && jsonValue["TimeMatch"].IsObject()) { m_timeMatch.FromJsonValue(jsonValue["TimeMatch"]); } if (jsonValue.HasMember("PressureMatch") && jsonValue["PressureMatch"].IsObject()) { m_pressureMatch.FromJsonValue(jsonValue["PressureMatch"]); } if (jsonValue.HasMember("KhMu") && jsonValue["KhMu"].IsObject()) { m_khMu.FromJsonValue(jsonValue["KhMu"]); } if (jsonValue.HasMember("DeltaPSkin") && jsonValue["DeltaPSkin"].IsObject()) { m_deltaPSkin.FromJsonValue(jsonValue["DeltaPSkin"]); } // Model description if (jsonValue.HasMember("OtherWellsIncluded") && jsonValue["OtherWellsIncluded"].IsObject()) { m_otherWellsIncluded.FromJsonValue(jsonValue["OtherWellsIncluded"]); } if (jsonValue.HasMember("RateDependentSkin") && jsonValue["RateDependentSkin"].IsObject()) { m_rateDependentSkin.FromJsonValue(jsonValue["RateDependentSkin"]); } if (jsonValue.HasMember("TimeDependentSkin") && jsonValue["TimeDependentSkin"].IsObject()) { m_timeDependentSkin.FromJsonValue(jsonValue["TimeDependentSkin"]); } // Model - Contour & faults if (jsonValue.HasMember("TopBoundary") && jsonValue["TopBoundary"].IsObject()) { m_topBoundary.FromJsonValue(jsonValue["TopBoundary"]); } if (jsonValue.HasMember("BottomBoundary") && jsonValue["BottomBoundary"].IsObject()) { m_bottomBoundary.FromJsonValue(jsonValue["BottomBoundary"]); } // Model - Results - Field if (jsonValue.HasMember("STOIIP") && jsonValue["STOIIP"].IsObject()) { m_STOIIP.FromJsonValue(jsonValue["STOIIP"]); } if (jsonValue.HasMember("STOIIPFree") && jsonValue["STOIIPFree"].IsObject()) { m_STOIIPFree.FromJsonValue(jsonValue["STOIIPFree"]); } if (jsonValue.HasMember("STOIP") && jsonValue["STOIP"].IsObject()) { m_STOIP.FromJsonValue(jsonValue["STOIP"]); } if (jsonValue.HasMember("QoTmax") && jsonValue["QoTmax"].IsObject()) { m_QoTmax.FromJsonValue(jsonValue["QoTmax"]); } if (jsonValue.HasMember("Tmax") && jsonValue["Tmax"].IsObject()) { m_Tmax.FromJsonValue(jsonValue["Tmax"]); } if (jsonValue.HasMember("Area") && jsonValue["Area"].IsObject()) { m_area.FromJsonValue(jsonValue["Area"]); } if (jsonValue.HasMember("BulkVolume") && jsonValue["BulkVolume"].IsObject()) { m_bulkVolume.FromJsonValue(jsonValue["BulkVolume"]); } // Statistics if (jsonValue.HasMember("GoodnessOfFit") && jsonValue["GoodnessOfFit"].IsObject()) { m_goodnessOfFit.FromJsonValue(jsonValue["GoodnessOfFit"]); } } // Warnings---提示 void nmDataMixedResults::setCriticalParameters(const nmDataAttribute& attr) { m_criticalParameters = attr; } nmDataAttribute& nmDataMixedResults::getCriticalParameters() { return m_criticalParameters; } // Analysis summary---分析总结 void nmDataMixedResults::setAnalysisName(const nmDataAttribute& attr) { m_analysisName = attr; } nmDataAttribute& nmDataMixedResults::getAnalysisName() { return m_analysisName; } void nmDataMixedResults::setReferenceWell(const nmDataAttribute& attr) { m_referenceWell = attr; } nmDataAttribute& nmDataMixedResults::getReferenceWell() { return m_referenceWell; } void nmDataMixedResults::setPVTReferencePhase(const nmDataAttribute& attr) { m_PVTReferencePhase = attr; } nmDataAttribute& nmDataMixedResults::getPVTReferencePhase() { return m_PVTReferencePhase; } void nmDataMixedResults::setPVTPhases(const nmDataAttribute& attr) { m_PVTPhases = attr; } nmDataAttribute& nmDataMixedResults::getPVTPhases() { return m_PVTPhases; } void nmDataMixedResults::setActiveProduction(const nmDataAttribute& attr) { m_activeProduction = attr; } nmDataAttribute& nmDataMixedResults::getActiveProduction() { return m_activeProduction; } void nmDataMixedResults::setOilRate(const nmDataAttribute& attr) { m_oilRate = attr; } nmDataAttribute& nmDataMixedResults::getOilRate() { return m_oilRate; } void nmDataMixedResults::setActivePressureGauge(const nmDataAttribute& attr) { m_activePressureGauge = attr; } nmDataAttribute& nmDataMixedResults::getActivePressureGauge() { return m_activePressureGauge; } void nmDataMixedResults::setAnalysisType(const nmDataAttribute& attr) { m_analysisType = attr; } nmDataAttribute& nmDataMixedResults::getAnalysisType() { return m_analysisType; } void nmDataMixedResults::setActiveModel(const nmDataAttribute& attr) { m_activeModel = attr; } nmDataAttribute& nmDataMixedResults::getActiveModel() { return m_activeModel; } // Main Results---主要结果 void nmDataMixedResults::setSource(const nmDataAttribute& attr) { m_source = attr; } nmDataAttribute& nmDataMixedResults::getSource() { return m_source; } void nmDataMixedResults::setMobility(const nmDataAttribute& attr) { m_mobility = attr; } nmDataAttribute& nmDataMixedResults::getMobility() { return m_mobility; } void nmDataMixedResults::setPbar(const nmDataAttribute& attr) { m_Pbar = attr; } nmDataAttribute& nmDataMixedResults::getPbar() { return m_Pbar; } void nmDataMixedResults::setProductivityIndex(const nmDataAttribute& attr) { m_productivityIndex = attr; } nmDataAttribute& nmDataMixedResults::getProductivityIndex() { return m_productivityIndex; } void nmDataMixedResults::setPoreVolume(const nmDataAttribute& attr) { m_poreVolume = attr; } nmDataAttribute& nmDataMixedResults::getPoreVolume() { return m_poreVolume; } // Diagnostic---诊断分析 void nmDataMixedResults::setDiagnosticWell(const nmDataAttribute& attr) { m_diagnosticWell = attr; } nmDataAttribute& nmDataMixedResults::getDiagnosticWell() { return m_diagnosticWell; } void nmDataMixedResults::setBoundary(const nmDataAttribute& attr) { m_boundary = attr; } nmDataAttribute& nmDataMixedResults::getBoundary() { return m_boundary; } void nmDataMixedResults::setReferenceRate(const nmDataAttribute& attr) { m_referenceRate = attr; } nmDataAttribute& nmDataMixedResults::getReferenceRate() { return m_referenceRate; } void nmDataMixedResults::setExtractionStartTime(const nmDataAttribute& attr) { m_extractionStartTime = attr; } nmDataAttribute& nmDataMixedResults::getExtractionStartTime() { return m_extractionStartTime; } void nmDataMixedResults::setPAtDt0(const nmDataAttribute& attr) { m_PAtDt0 = attr; } nmDataAttribute& nmDataMixedResults::getPAtDt0() { return m_PAtDt0; } void nmDataMixedResults::setTimeMatch(const nmDataAttribute& attr) { m_timeMatch = attr; } nmDataAttribute& nmDataMixedResults::getTimeMatch() { return m_timeMatch; } void nmDataMixedResults::setPressureMatch(const nmDataAttribute& attr) { m_pressureMatch = attr; } nmDataAttribute& nmDataMixedResults::getPressureMatch() { return m_pressureMatch; } void nmDataMixedResults::setKhMu(const nmDataAttribute& attr) { m_khMu = attr; } nmDataAttribute& nmDataMixedResults::getKhMu() { return m_khMu; } void nmDataMixedResults::setDeltaPSkin(const nmDataAttribute& attr) { m_deltaPSkin = attr; } nmDataAttribute& nmDataMixedResults::getDeltaPSkin() { return m_deltaPSkin; } // Model description---模型表征 void nmDataMixedResults::setOtherWellsIncluded(const nmDataAttribute& attr) { m_otherWellsIncluded = attr; } nmDataAttribute& nmDataMixedResults::getOtherWellsIncluded() { return m_otherWellsIncluded; } void nmDataMixedResults::setRateDependentSkin(const nmDataAttribute& attr) { m_rateDependentSkin = attr; } nmDataAttribute& nmDataMixedResults::getRateDependentSkin() { return m_rateDependentSkin; } void nmDataMixedResults::setTimeDependentSkin(const nmDataAttribute& attr) { m_timeDependentSkin = attr; } nmDataAttribute& nmDataMixedResults::getTimeDependentSkin() { return m_timeDependentSkin; } // Model - Contour & faults---模型-边界和断层 void nmDataMixedResults::setTopBoundary(const nmDataAttribute& attr) { m_topBoundary = attr; } nmDataAttribute& nmDataMixedResults::getTopBoundary() { return m_topBoundary; } void nmDataMixedResults::setBottomBoundary(const nmDataAttribute& attr) { m_bottomBoundary = attr; } nmDataAttribute& nmDataMixedResults::getBottomBoundary() { return m_bottomBoundary; } // Model - Results - Field---模型-结果-场 void nmDataMixedResults::setSTOIIP(const nmDataAttribute& attr) { m_STOIIP = attr; } nmDataAttribute& nmDataMixedResults::getSTOIIP() { return m_STOIIP; } void nmDataMixedResults::setSTOIIPFree(const nmDataAttribute& attr) { m_STOIIPFree = attr; } nmDataAttribute& nmDataMixedResults::getSTOIIPFree() { return m_STOIIPFree; } void nmDataMixedResults::setSTOIP(const nmDataAttribute& attr) { m_STOIP = attr; } nmDataAttribute& nmDataMixedResults::getSTOIP() { return m_STOIP; } void nmDataMixedResults::setQoTmax(const nmDataAttribute& attr) { m_QoTmax = attr; } nmDataAttribute& nmDataMixedResults::getQoTmax() { return m_QoTmax; } void nmDataMixedResults::setTmax(const nmDataAttribute& attr) { m_Tmax = attr; } nmDataAttribute& nmDataMixedResults::getTmax() { return m_Tmax; } void nmDataMixedResults::setArea(const nmDataAttribute& attr) { m_area = attr; } nmDataAttribute& nmDataMixedResults::getArea() { return m_area; } void nmDataMixedResults::setBulkVolume(const nmDataAttribute& attr) { m_bulkVolume = attr; } nmDataAttribute& nmDataMixedResults::getBulkVolume() { return m_bulkVolume; } void nmDataMixedResults::setGoodnessOfFit(const nmDataAttribute& attr) { m_goodnessOfFit = attr; } nmDataAttribute& nmDataMixedResults::getGoodnessOfFit(){ return m_goodnessOfFit; }