From dfe628e19bcc51f873bad1da836e4b22814e0c81 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Thu, 24 Sep 2026 18:20:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(nmNum):=20=E6=8E=A5=E5=85=A5=20HX=5FNWTM?= =?UTF-8?q?=20=E7=BB=98=E5=9B=BE=E6=8E=A5=E5=8F=A3=E5=B9=B6=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E6=97=A7=E6=9B=B2=E7=BA=BF=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 HX_NWTM_PLOT 生成双对数和半对数曲线 - 预初始化输出矩阵,修复打开数值解时的访问冲突 - 统一 HX_NWTM 接口调用锁并增加输入输出校验 - 移除 singlePhaseSolverDll 的代码及工程依赖 - 更新 HX_NWTM DLL、头文件和导入库 --- 3rd/FFmpeg-1.1/DELIVERY-zh-CN.txt | 9 +- 3rd/Pebi/bin/HX_NWTM.dll | Bin 518656 -> 523776 bytes 3rd/Pebi/include/accelwt_solver_api.h | 128 +++++++++ 3rd/Pebi/include/pch.h | 13 +- 3rd/Pebi/lib/AccelWT_CPU.lib | Bin 0 -> 5590 bytes 3rd/Pebi/lib/HX_NWTM.lib | Bin 0 -> 3312 bytes 3rd/Pebi/src/main.cpp | 30 +-- Include/nmNum/nmData/nmDataUtils.h | 24 ++ .../nmCalculationDllPebiSolverTask.cpp | 186 +++---------- .../nmCalculation/nmCalculationUtils.cpp | 8 +- Src/nmNum/nmData/nmDataAnalyzeManager.cpp | 101 +++----- Src/nmNum/nmData/nmDataUtils.cpp | 244 ++++++++++++++++++ Src/nmNum/nmSubWnd/nmSubWndMain.cpp | 35 +-- Src4/nmNum/nmCalculation/nmCalculation.pro | 1 - Src4/nmNum/nmData/nmData.pro | 1 - 15 files changed, 497 insertions(+), 283 deletions(-) create mode 100644 3rd/Pebi/include/accelwt_solver_api.h create mode 100644 3rd/Pebi/lib/AccelWT_CPU.lib create mode 100644 3rd/Pebi/lib/HX_NWTM.lib diff --git a/3rd/FFmpeg-1.1/DELIVERY-zh-CN.txt b/3rd/FFmpeg-1.1/DELIVERY-zh-CN.txt index 3dcf802d..7e0ea29f 100644 --- a/3rd/FFmpeg-1.1/DELIVERY-zh-CN.txt +++ b/3rd/FFmpeg-1.1/DELIVERY-zh-CN.txt @@ -49,12 +49,9 @@ include 和 compat。直接交付整个目录已经覆盖这些内容。 lib MSVC x86 导入库 bin 运行库及自动部署来源 -nmSubWxs 工程已经默认启用以下构建配置: - - CONFIG += nm_ffmpeg_video_export - -启用后,qmake 会检查头文件、导入库、兼容头和四个运行库;链接完成后 -自动将四个 DLL 复制到当前 Debug 或 Release 输出目录。 +nmSubWxs 工程通过 Src4/ffmpeg.pri 默认启用FFmpeg视频导出并链接上述 +四个导入库。当前工程不在链接完成后自动复制DLL;制作开发或运行环境时, +应将四个运行DLL分别预置到 Bin/Debug 和 Bin/Release 中。 四、不要混入的旧文件 -------------------- diff --git a/3rd/Pebi/bin/HX_NWTM.dll b/3rd/Pebi/bin/HX_NWTM.dll index 7da5d2def985e01bb143c62b3a749392534730a3..9dccdc2c16c755b0a4b9f673ad6235f4278f5f89 100644 GIT binary patch delta 121554 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 delta 116595 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 #include #include +#include "accelwt_solver_api.h" #include "accelwt_cpu.h" #include - #ifndef M_PI const double M_PI = acos(-1.0); #endif - typedef std::vector>>dVec3; //ÈýάÊý×é:double typedef std::vector>dVec2; //¶þάÊý×é:double typedef std::vector>iVec2; //¶þάÊý×é:int @@ -169,7 +168,7 @@ struct HX_NWTM_GRID_INPUT d[0] = -200; d[1] = -200; d[2] = 200; d[3] = -200; d[4] = 0.05; d[5] = 0; FractureVerticalWell[0] = d; MultistageFracturedHorizontalWell.resize(1); - MultistageFracturedHorizontalWell[0].resize(3, dVec1(5)); + MultistageFracturedHorizontalWell[0].resize(3, dVec1(6)); d[0] = -600; d[1] = 600; d[2] = -400; d[3] = 600; d[4] = 0.1; d[5] = 0; MultistageFracturedHorizontalWell[0][0] = d; d[0] = -600; d[1] = 400; d[2] = -400; d[3] = 400; d[4] = 0.1; d[5] = 0; MultistageFracturedHorizontalWell[0][1] = d; d[0] = -600; d[1] = 200; d[2] = -400; d[3] = 200; d[4] = 0.1; d[5] = 0; MultistageFracturedHorizontalWell[0][2] = d; @@ -473,13 +472,19 @@ struct HX_NWTM_MODEL_OUTPUT ~HX_NWTM_MODEL_OUTPUT() {} }; +struct HX_PLOT_DATA +{ + dVec2 loglog; //˫¶ÔÊýÊý¾Ýloglog[0]:ʱ¼ä²loglog[1]:ѹÁ¦²loglog[2]:ѹÁ¦²Êý + dVec2 semilog; //°ë¶ÔÊýÊý¾Ýsemilog[0]:ʱ¼ä²semilog[1]:ѹÁ¦ +}; + HX_API void HX_NWTM_GRID(HX_NWTM_GRID_OUTPUT1& p1, HX_NWTM_GRID_OUTPUT2& p2, const HX_NWTM_GRID_INPUT& p0, std::string LIC); //ÊýֵÊԾ®Íø¸ñ½ӿÚ HX_API void HX_NWTM_KRINGING(HX_KRING_OUTPUT& p1, const HX_KRING_INPUT p0, std::string LIC); //ÊýֵÊԾ®·ǾùÖÊÐԼÆËã½ӿÚ HX_API void HX_NWTM_MODEL(HX_NWTM_MODEL_OUTPUT& p1, const HX_NWTM_MODEL_INPUT& p0, std::string LIC); //ÊýֵÊԾ®ģÐÍÇó½âÆ÷½ӿÚ +HX_API void HX_NWTM_PLOT(HX_PLOT_DATA& res, const dVec2& Rate, const dVec2& Press, const double tmin, const double tmax, std::string LIC);//ÊýֵÊԾ®»æͼ½ӿÚ HX_API void set_omp_threads(int n); HX_API void set_ilu_reuse_steps(int n); HX_API int getPEBInum(); HX_API int getsolvetime(); HX_API void set_solvetype(int n); - diff --git a/3rd/Pebi/lib/AccelWT_CPU.lib b/3rd/Pebi/lib/AccelWT_CPU.lib new file mode 100644 index 0000000000000000000000000000000000000000..06ee83a7b38f240be40db53dea7182357e71a7ce GIT binary patch literal 5590 zcmcH-O>Y}jaBMeeY$uN6q+Ae^1EDR@y0IJEMWQI7jYL#8jq)L+NY%^MUMB{BEZ%j1 z9*Q_ts>F#~PrdOYsB!=a1RRjyP_^m>QG|++C`C%!LzuVT=j{7fJGSYQ#&6%7nK$$1 zYiB+AmR8Siy&XCg=f}w;zhgwa6&8?NF^ z0r3=~*Bp3^Gs4)m15a^Ah~e4>#KjQC4F?|Kj4)Aj;6Ba>N7gA2vT$+f(()=fKfiKr zd0}bw(lVLL=k@Y?tK{6$8W6I$mdnXR@TrTcNwfOy+TsOrer|ORxk?p-5RD%6kwx-G zgIv+_AL!KrscID++F)ePd|lTpfrstM)CIk$HOdyL8CI!QHF;4I(wpDXD@LuZmD?XA zQ>jigt$OVfQ4?oVrr*>pQr1k17+adDlTx)<<9U??@;PZZWRqh#KOQNTPQ6%Cm`=6QKk*L5qEY}G9+T5vlEup0(Q zjR4$;01S=-Tt(PLxE2L?jIcch@DyP?hHC_49N-Z`aRT5z!uk zRvdfy5(WKAV{>YS6|;GKz*deMvk-kJQNr@9O{EwDiy-`j@SC#{zLdv7qIHlF)Cc@7>q{`<32r;jtHE9o7ZC(OZj@utQD>J@#WXzxrN0G zO*H>Ij7!Q$4*)Eo^oc4lU_S|xU^ZW?7^w5j>ptJ!9urBq=%7mafn9wTz*c*U?bw&3 zvI1;phSJ~$v}n@%J9K}F{y2l44sh04(a8_k)%IT2+XhZZxO&IPNu_68k>iKIKdXH6 zm8~RI6_k-vuu=OzuE;sfc4_2%$rjE`Bj>qA#6f)g5-Q^PvCy^U&SYGc3qZtp_TUZ* zXgXYNxi&eMX2zmnNpsFUTsb$x_9@*jY~jrRyM+&8RodpX4a#mUn@Kr_jni*Xny@+F zi$^QpzHZ-gh;JLYmzy97gmuSkNHdqZBnKXT_YX~IA68TDo6va&2{O8tnMupHegD?i z_fDcrzbI3DIg7%(&i^b+f7gwJ6A$jvsu%E*F1`IlHH39%yJuw^JX!x^?^V>|kgP?s zyAXsx*LTmbm!|9P^VQFPO`_BRQL3ta>05)WBGMC$wSQ@n4~iOi^hcr+!n&jFGl~c} z8~p3{6Q~3IX5nI<^;pj__KWfLXEgSQykxWfPPk|f{y!~8-NvoUKfi&}gI>~`4P@W4 zv+NHySL{t5P3_RuDr- zOI*2iqbvS^3!C@@{2wHE&b>3-x#dz@!O1;$X3m_MZ_b%-9y8A?t)1G7z|*ij%`GOQ zu~>3$VcxEfifSS%OWOeecK~k-@Err=J-~k?)G%b@W7D{C;y}J3blqr@AC2jq+mVZ^wLDTYE+3aNld=wUDdwG2;zoDg<%gc~m zwT)6HzeXR8QQzCw9Q1OCTp_)h?KiV2+j>W9Hya0f=fl1Zt*>g1zpHmlllmT+*lVT* zcdIwLT1)S?b*S(^j z)s@Wq?w&DsSss}$a~5AhM3|NrIQ9X(ap1@goRJ(-!%`49A(^IfjhGc7eUEY?7=rL( z3<0>{z9@$Y+{ zaH5n&iedR;^-##G!q{1QB|mMPvy=bIeJDJftu`74iT-xd#FO#}+74u09(?)!^2B)^5iLwO3(Q(?Ct)Wj>` zoJ88OK85h9oAN1Q9;cw<)Fa%QBvOONl&Xl7fQN4h5g)+B`VMInB?6;~t!Na&AbMQ-Cqun$#H1aSxBw#My=v zxUflB8rFyTClZeiBt?xgH%j!s*#kSExH}Y6VhQVv$-3MIQ@$CK<0-7%K$E!g0vtJNi_gTJZtbsM1Yj<*bJPaxuY?Q~Q<3+Vnw0$& zmwLAQDJvqs(dZ5v(VIK57UY|W-$uMSvo1ch?it=q^xaO%dO;}<#rO-thwVrY3CTq# z|@0YdE{dxr~6z59DTKt&N1YJir;4jqWW049@+pNPDnKC IVPnJk1AH&#RR910 literal 0 HcmV?d00001 diff --git a/3rd/Pebi/src/main.cpp b/3rd/Pebi/src/main.cpp index de701d61..ffa917e3 100644 --- a/3rd/Pebi/src/main.cpp +++ b/3rd/Pebi/src/main.cpp @@ -148,7 +148,7 @@ int main() std::cout << solvetypename[type] << "\n"; int threads ; if (solvetype[type] == 1) { - threads = 5; + threads = 1; } else if (solvetype[type] == 2) { threads = 1; @@ -157,7 +157,7 @@ int main() { set_omp_threads(omp_threads[thr]); std::cout << omp_threads[thr] << "Ï̲߳âÊÔ\n"; - for (int iiii = 0; iiii < 8; ++iiii) + for (int iiii = 0; iiii < 1; ++iiii) { welltype = WT[iiii]; flowtype = FT[iiii]; @@ -442,7 +442,7 @@ int main() p3.CS.C.resize(1); p3.CS.C[0] = 0.1; p3.CS.S.resize(1); - p3.CS.S[0] = 0.1; + p3.CS.S[0] = -0.87; p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } p3.PVT.Bw = dVec1(200, 1.05);//ËùÓÐÊýΪһ¸öֵ p3.PVT.miuw = dVec1(200, 0.8);//ËùÓÐÊýΪһ¸öֵ @@ -624,18 +624,18 @@ int main() std::cout << " " << name[iiii] << ":" << getPEBInum() << "," << getsolvetime() << "ms\n"; //Êý¾ݵ¼³ö - /*dVec2 pwf; - for (int i = 0; i < p4.t.size(); ++i) { - dVec1 a; - a.resize(p4.pw.size() + 1); - a[0] = p4.t[i]; - for (int j = 1; j < a.size(); ++j) { - a[j] = p4.pw[j - 1][i]; - } - pwf.push_back(a); - } - std::string filename = solvetypename[type] + name[iiii] + "pwf.csv"; - Write2DVectorToCSV(pwf, filename);*/ + //dVec2 pwf; + //for (int i = 0; i < p4.t.size(); ++i) { + // dVec1 a; + // a.resize(p4.pw.size() + 1); + // a[0] = p4.t[i]; + // for (int j = 1; j < a.size(); ++j) { + // a[j] = p4.pw[j - 1][i]; + // } + // pwf.push_back(a); + //} + //std::string filename = solvetypename[type] + name[iiii] + "pwf.csv"; + //Write2DVectorToCSV(pwf, filename); /* Write1DVectorToCSV(p4.t, "t.csv"); Write2DVectorToCSV(p4.pw, "pw.csv"); diff --git a/Include/nmNum/nmData/nmDataUtils.h b/Include/nmNum/nmData/nmDataUtils.h index 1c5d7292..29994cc1 100644 --- a/Include/nmNum/nmData/nmDataUtils.h +++ b/Include/nmNum/nmData/nmDataUtils.h @@ -2,9 +2,11 @@ #include "ZxDataObject.h" #include "nmData_global.h" +#include class ZxDataProject; class ZxDataWell; +class QMutex; // 数值试井数据对象如何进行初始加载的方式 class NM_DATA_EXPORT nmDataUtils : public QObject @@ -23,6 +25,28 @@ public: static bool deleteChildrenOfWell(ZxDataWell* pDataWell); static QStringList readNmDataFile(const QString &filePath); + + /** @brief 返回所有 HX_NWTM.dll 接口共用的进程级互斥锁。 */ + static QMutex* getHxNwtmDllMutex(); + + /** + * @brief 调用 HX_NWTM_PLOT 生成双对数和半对数曲线。 + * + * flowDurations 保存各流动段持续时间;flowSectionIndex 是一基索引。 + * 本方法会把当前流动段换算成累计的 tmin/tmax,并统一完成 DLL 加载、 + * 接口探测、输入转换和输出校验。 + */ + static bool calculateHxNwtmPlot( + const QVector& flowDurations, + const QVector& rates, + const QVector& pressureTimes, + const QVector& pressures, + int flowSectionIndex, + const QString& licensePath, + QVector >& logLog, + QVector >& semiLog, + bool* interfaceAvailable = 0, + QString* errorMessage = 0); }; diff --git a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp index 40c387fe..c0b61d6e 100644 --- a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp @@ -1,5 +1,4 @@ #include "nmCalculationDllPebiSolverTask.h" -#include "singlePhaseSolver.h" #include "zxLogInstance.h" #include "nmDataAnalyzeManager.h" #include "nmDataWellBase.h" @@ -14,6 +13,7 @@ #include "nmDataFracture.h" #include "nmDataFault.h" #include "nmDataTimeStepSetting.h" +#include "nmDataUtils.h" #include "nmPebiResultSnapshotBuilder.h" #include "nmPebiCellMapping.h" #include "nmPebiStaticPropertyCalculator.h" @@ -224,9 +224,9 @@ bool captureResultWellMetadata( return false; } - // 发布结果前用当前配置重算气井历史曲线,替换旧项目中未转拟压力的缓存。 - if(pDataManager->getSolverModelType() == SMT_Gas_VariablePvt - && !pDataManager->updateWellHistoryData(pWellData)) { + // 正式求解前统一重算历史双对数和半对数曲线,确保油井、水井和气井的 + // 曲线签名都与本次输入一致。 + if(!pDataManager->updateWellHistoryData(pWellData)) { return false; } @@ -578,31 +578,6 @@ bool buildModelInputFromSnapshot( return true; } -bool isReasonableLogLogValue(double value) -{ - const double maxReasonableAbsValue = 1.0e12; - return isFiniteSolverNumber(value) - && value >= -maxReasonableAbsValue - && value <= maxReasonableAbsValue; -} - -bool isValidLogLogPoint(const Point& pt) -{ - return isReasonableLogLogValue(pt.x) - && isReasonableLogLogValue(pt.y) - && isReasonableLogLogValue(pt.z) - && pt.x > 0.0 - && pt.z >= DBL_EPSILON; -} - -bool isValidSemiLogPoint(const Point& pt) -{ - return isReasonableLogLogValue(pt.x) - && pt.x > 0.0 - && !pt.pointData.empty() - && isReasonableLogLogValue(pt.pointData[0]); -} - typedef bool (*CalPseudoPressure)(double, double&, int); // mAlgPseudo.dll 是主界面拟压力算法所在模块. @@ -1649,16 +1624,15 @@ bool nmCalculationDllPebiSolverTask::buildPebiModeResult( vvecSemiLog.clear(); if(bRateControlled) { - // 准备压力数据 (用于传递给外部 DLL) - std::vector wellPressureDataForDll; + // 准备传给 HX_NWTM_PLOT 的压力或气井拟压力序列。 + QVector vecPressureForPlot; + vecPressureForPlot.reserve( + static_cast(p1.pw[wellIdx].size())); for(size_t i = 0; i < p1.pw[wellIdx].size(); ++i) { if((i % 256) == 0 && isCancelRequested()) { return false; } - Point pt; - pt.x = p1.t[i]; - // 使用局部副本转换, 不修改 p1.pw 中需要保存和显示的原始压力. double pressureForLog = p1.pw[wellIdx][i]; if(usePseudoPressure @@ -1671,126 +1645,36 @@ bool nmCalculationDllPebiSolverTask::buildPebiModeResult( << "well code:" << oWellRef.m_sWellCode; return fail(tr("Failed to convert gas pressure to pseudo-pressure.")); } - - pt.y = pressureForLog; - pt.z = 0.0; - wellPressureDataForDll.push_back(pt); + vecPressureForPlot.append(pressureForLog); } - // 准备流量段数据 - // 输入快照已经移除可选 (0,0) 占位点,此处逐段传给曲线 DLL。 - const int nTimeNumQ = - oWellInput.m_vecFlowDurations.size(); - std::vector timeQ(nTimeNumQ); - std::vector q(nTimeNumQ); - - for(int i = 0; i < nTimeNumQ; ++i) { - timeQ[i] = oWellInput.m_vecFlowDurations[i]; - q[i] = (*pReferenceRates)[i]; + // HX_NWTM.dll 直接返回双对数三列和半对数两列, + // 数值后处理不再加载旧曲线库。 + bool bHxPlotInterfaceAvailable = false; + QString sHxPlotError; + const bool bCalculatedByHxPlot = + nmDataUtils::calculateHxNwtmPlot( + oWellInput.m_vecFlowDurations, + *pReferenceRates, + currentWellTime, + vecPressureForPlot, + oWellInput.m_nFlowSectionIndex, + m_pInputSnapshot->m_oGridInput.m_sLicensePath, + vvecLogLog, + vvecSemiLog, + &bHxPlotInterfaceAvailable, + &sHxPlotError); + if(!bCalculatedByHxPlot) { + // 旧曲线库已下线,接口缺失或计算失败时直接返回, + // 避免继续使用空曲线或上一轮计算残留的数据。 + qWarning() << (bHxPlotInterfaceAvailable + ? "HX_NWTM_PLOT failed for well" + : "HX_NWTM_PLOT is not exported for well") + << oWellRef.m_sWellCode << ":" << sHxPlotError; + return fail(tr("Failed to calculate pressure curves.")); } - - // 调用外部 DLL 计算双对数曲线 - std::vector logPreResultFromDll; // 存储 DLL 的计算结果 - const int iSectionFlowIndex = - oWellInput.m_nFlowSectionIndex; - - // 第一步:无产量观察井只接收压力结果,不调用依赖产量制度的曲线 DLL。 - HMODULE hMod_solver = nTimeNumQ > 0 - ? LoadLibrary(L"singlePhaseSolverDll.dll") : nullptr; - - if(nTimeNumQ <= 0) { - // 第二步:保持固定的数据列结构,便于结果保存和后续读取; - // 各列为空明确表示该观察井没有可展示的双对数、半对数结果。 - vvecLogLog.clear(); - vvecLogLog.append(QVector()); - vvecLogLog.append(QVector()); - vvecLogLog.append(QVector()); - vvecSemiLog.clear(); - vvecSemiLog.append(QVector()); - vvecSemiLog.append(QVector()); - } else if(hMod_solver) { - typedef bool (*PreLog)(const std::vector&, const int&, double*, double*, int, std::vector&); - PreLog preLogFun = (PreLog)GetProcAddress(hMod_solver, "logLogPre"); - - if(nullptr == preLogFun) { - FreeLibrary(hMod_solver); - std::cout << "preLogFun failed!\n"; - return fail(tr("The pressure curve interface is incomplete.")); - } - - // 气井传入拟压力序列, 油井和水井仍传入原始压力序列. - // 计算失败必须向上返回, 避免 PSO 使用空曲线或上一粒子的旧曲线. - if(!preLogFun(wellPressureDataForDll, - iSectionFlowIndex, - timeQ.data(), - q.data(), - nTimeNumQ, - logPreResultFromDll)) { - FreeLibrary(hMod_solver); - return fail(tr("Failed to calculate pressure curves.")); - } - - if(isCancelRequested()) { - FreeLibrary(hMod_solver); - return false; - } - - // 填充双对数曲线数据到局部变量 - QVector logX, logY, logZ; - - // 检查结果是否为空,并跳过第一个点 - if (logPreResultFromDll.size() > 1) { - // 从索引 1 开始遍历,跳过索引 0 的第一个点 - for (size_t i = 1; i < logPreResultFromDll.size(); ++i) { - if((i % 256) == 0 && isCancelRequested()) { - FreeLibrary(hMod_solver); - return false; - } - const auto& pt = logPreResultFromDll[i]; - if(!isValidLogLogPoint(pt)) { - continue; - } - - logX.append(pt.x); - logY.append(pt.y); - logZ.append(pt.z); - } - } - - vvecLogLog.clear(); // 清空上次循环的数据 - vvecLogLog.append(logX); - vvecLogLog.append(logY); - vvecLogLog.append(logZ); - - // 填充半对数曲线数据到局部变量 - QVector semiLogX, semiLogY; - - // 检查结果是否为空,并跳过第一个点 - if (logPreResultFromDll.size() > 1) { - // 半对数曲线也应该同步跳过第一个点 - for (size_t i = 1; i < logPreResultFromDll.size(); ++i) { - if((i % 256) == 0 && isCancelRequested()) { - FreeLibrary(hMod_solver); - return false; - } - const auto& pt = logPreResultFromDll[i]; - if(!isValidSemiLogPoint(pt)) { - continue; - } - - semiLogX.append(pt.x); - semiLogY.append(pt.pointData[0]); - } - } - - vvecSemiLog.clear(); // 清空上次循环的数据 - vvecSemiLog.append(semiLogX); - vvecSemiLog.append(semiLogY); - - FreeLibrary(hMod_solver); - } else { - qWarning() << "Failed to load singlePhaseSolverDll.dll."; - return fail(tr("Failed to load singlePhaseSolverDll.dll.")); + if(isCancelRequested()) { + return false; } } diff --git a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp index 321ea545..1058c4e7 100644 --- a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp @@ -1,5 +1,7 @@ #include "nmCalculationUtils.h" +#include "nmDataUtils.h" + #include #include #include @@ -24,9 +26,6 @@ namespace { -// HX_NWTM.dll 的配置和结果查询接口使用进程级共享状态,所有入口共用此锁。 -QMutex s_oHxNwtmDllMutex; - bool isKrigingCancellationRequested(const QAtomicInt* pCancelRequested) { return pCancelRequested != NULL && @@ -299,7 +298,8 @@ void nmCalculationUtils::cleanupStaleAutoFitTemporaryDirectories( QMutex* nmCalculationUtils::getHxNwtmDllMutex() { - return &s_oHxNwtmDllMutex; + // 锁由更底层的 nmData 模块持有,保证数据预处理和求解模块调用的是同一把锁。 + return nmDataUtils::getHxNwtmDllMutex(); } void nmCalculationUtils::cleanupPebiGridDebugFiles() diff --git a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp index 12a526cc..380cb5fd 100644 --- a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp +++ b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp @@ -65,7 +65,6 @@ #include #include #include -#include "singlePhaseSolver.h" #include "nmDataTimeStepSetting.h" @@ -2202,6 +2201,7 @@ void nmDataAnalyzeManager::initCurWellData() static bool calculateLogDataFromGaugeInput( const nmWellGaugeInputData& oGaugeInput, bool bUsePseudoPressure, void* pFitting, + const QString& sLicensePath, QVector>& vvecHistoryData, QVector>& vvecLogPreData, QVector>& vvecSemiLogPreData) @@ -2218,18 +2218,12 @@ static bool calculateLogDataFromGaugeInput( // 准备压力数据 const QVector& vecPressure = oGaugeInput.vecPressurePoints; - std::vector wellPressureData; + QVector vecPressureForPlot; + vecPressureForPlot.reserve(vecPressure.size()); - // 填充 wellPressureData 和 vvecHistoryData + // 同时保留界面显示的原始压力,并准备传给 HX_NWTM_PLOT 的压力纵坐标。 foreach(const QPointF& qpoint, vecPressure) { - // wellPressureData - Point pt; - pt.x = qpoint.x(); - pt.y = qpoint.y(); - pt.z = 0.0; - wellPressureData.push_back(pt); - - // vvecHistoryData + vecPressureForPlot.append(qpoint.y()); vvecHistoryData[0].append(qpoint.x()); // x vvecHistoryData[1].append(qpoint.y()); // y } @@ -2262,60 +2256,31 @@ static bool calculateLogDataFromGaugeInput( return false; } for(int i = 0; i < vecPseudoPressure.size(); ++i) { - wellPressureData[i].y = vecPseudoPressure[i]; - } - } - - const int nTimeNumQ = oGaugeInput.vecFlowDurations.size(); - std::vector timeQ(nTimeNumQ); - std::vector q(nTimeNumQ); - - for(int i = 0; i < nTimeNumQ; ++i) { - timeQ[i] = oGaugeInput.vecFlowDurations[i]; - q[i] = (*pReferenceRates)[i]; - } - - // 调用 DLL 计算双对数曲线 - std::vector logPre; - int iSectionFlowIndex = oGaugeInput.nFlowSectionIndex; - - HMODULE hMod_solver = LoadLibrary(L"singlePhaseSolverDll.dll"); - - if(hMod_solver) { - typedef bool (*PreLog)(const std::vector&, const int&, double*, double*, int, std::vector&); - PreLog preLogFun = (PreLog)GetProcAddress(hMod_solver, "logLogPre"); - - if(nullptr == preLogFun) { - FreeLibrary(hMod_solver); - std::cout << "preLogFun failed!\n"; - return false; - } - - bool bCalculated = preLogFun(wellPressureData, iSectionFlowIndex, - timeQ.data(), q.data(), nTimeNumQ, logPre); - if(!bCalculated || logPre.empty()) { - FreeLibrary(hMod_solver); - return false; - } - - // The solver's final point is not part of the plotted result. - for(std::vector::size_type i = 0; i + 1 < logPre.size(); ++i) { - //logFile << logPre[i].x << "\t" << logPre[i].y << "\t" << logPre[i].z << "\t" << std::endl; - vvecLogPreData[0].append(logPre[i].x); // x - vvecLogPreData[1].append(logPre[i].y); // y - vvecLogPreData[2].append(logPre[i].z); // z - } - - // 填充半对数曲线数据 (x, pointData[0]) - foreach(const auto& point, logPre) { - vvecSemiLogPreData[0].append(point.x); // x - double y_value = point.pointData.empty() ? 0.0 : point.pointData[0]; - vvecSemiLogPreData[1].append(y_value); // pointData[0] 或默认值 - } - - FreeLibrary(hMod_solver); - return true; - } + vecPressureForPlot[i] = vecPseudoPressure[i]; + } + } + + bool bHxPlotInterfaceAvailable = false; + QString sHxPlotError; + if(nmDataUtils::calculateHxNwtmPlot( + oGaugeInput.vecFlowDurations, + *pReferenceRates, + vvecHistoryData[0], + vecPressureForPlot, + oGaugeInput.nFlowSectionIndex, + sLicensePath, + vvecLogPreData, + vvecSemiLogPreData, + &bHxPlotInterfaceAvailable, + &sHxPlotError)) { + return true; + } + // SinglePhase 回退已移除。新导出缺失或计算失败时必须明确失败, + // 防止界面及自动拟合继续使用旧曲线或空曲线。 + qWarning() << (bHxPlotInterfaceAvailable + ? "HX_NWTM_PLOT failed while processing history data:" + : "HX_NWTM_PLOT is not exported by HX_NWTM.dll:") + << sHxPlotError; return false; } @@ -3077,7 +3042,8 @@ void nmDataAnalyzeManager::calculationLogData( nmWellGaugeInputData oGaugeInput; pWellData->buildGaugeInputData(oGaugeInput); calculateLogDataFromGaugeInput(oGaugeInput, - getSolverModelType() == SMT_Gas_VariablePvt, m_pOwnerFitting, vvecHistoryData, + getSolverModelType() == SMT_Gas_VariablePvt, m_pOwnerFitting, + getLicensePath(), vvecHistoryData, vvecLogPreData, vvecSemiLogPreData); } @@ -3098,7 +3064,8 @@ bool nmDataAnalyzeManager::updateWellHistoryData( QVector > vecHistoryLogLog; QVector > vecHistorySemiLog; const bool bCalculated = calculateLogDataFromGaugeInput(oGaugeInput, - getSolverModelType() == SMT_Gas_VariablePvt, m_pOwnerFitting, vecHistoryPressure, + getSolverModelType() == SMT_Gas_VariablePvt, m_pOwnerFitting, + getLicensePath(), vecHistoryPressure, vecHistoryLogLog, vecHistorySemiLog); // 转换或计算失败时清除旧曲线的有效标记,避免继续使用旧的压力曲线。 pWellData->setHistoryData(vecHistoryPressure, vecHistoryLogLog, diff --git a/Src/nmNum/nmData/nmDataUtils.cpp b/Src/nmNum/nmData/nmDataUtils.cpp index 164e0dd2..0bb377ca 100644 --- a/Src/nmNum/nmData/nmDataUtils.cpp +++ b/Src/nmNum/nmData/nmDataUtils.cpp @@ -7,8 +7,54 @@ #include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include + +namespace +{ +typedef std::vector > nmHxPlotMatrix; + +/** + * @brief 与算法方 HX_PLOT_DATA 二进制布局一致的本地结构。 + * + * 正式接口头文件当前使用 GBK 编码。这里保留最小 ABI 镜像,避免为了一个新增 + * 结构整体转码第三方头文件;函数通过 GetProcAddress 动态解析,不参与静态链接。 + */ +struct nmHxPlotData +{ + nmHxPlotMatrix loglog; + nmHxPlotMatrix semilog; +}; + +// HX_NWTM.dll 内部存在进程级共享状态,建网、求解、克里金和绘图必须共用同一把锁。 +QMutex s_oHxNwtmDllMutex; + +void setHxPlotError(QString* pErrorMessage, const QString& sMessage) +{ + if(pErrorMessage != 0) { + *pErrorMessage = sMessage; + } +} + +bool isReasonableHxPlotValue(double dValue) +{ + const double dMaximumAbsoluteValue = 1.0e12; + return _finite(dValue) != 0 && + dValue >= -dMaximumAbsoluteValue && + dValue <= dMaximumAbsoluteValue; +} + +} + nmDataUtils::nmDataUtils() { } @@ -16,6 +62,204 @@ nmDataUtils::~nmDataUtils() { } +QMutex* nmDataUtils::getHxNwtmDllMutex() +{ + return &s_oHxNwtmDllMutex; +} + +bool nmDataUtils::calculateHxNwtmPlot( + const QVector& flowDurations, + const QVector& rates, + const QVector& pressureTimes, + const QVector& pressures, + int flowSectionIndex, + const QString& licensePath, + QVector >& logLog, + QVector >& semiLog, + bool* interfaceAvailable, + QString* errorMessage) +{ + logLog.clear(); + semiLog.clear(); + if(interfaceAvailable != 0) { + *interfaceAvailable = false; + } + if(errorMessage != 0) { + errorMessage->clear(); + } + + // Rate 和 Press 都是两行矩阵;两行长度不一致时不能交给第三方 DLL。 + if(flowDurations.isEmpty() || + flowDurations.size() != rates.size() || + pressureTimes.isEmpty() || + pressureTimes.size() != pressures.size() || + flowSectionIndex < 1 || + flowSectionIndex > flowDurations.size()) { + setHxPlotError(errorMessage, + QString::fromLatin1("Invalid HX_NWTM_PLOT input arrays.")); + return false; + } + // 项目保存的是逐段持续时间,算法接口需要当前段的累计起止时刻。 + double dSectionStart = 0.0; + for(int nIndex = 0; nIndex < flowSectionIndex - 1; ++nIndex) { + if(!isReasonableHxPlotValue(flowDurations[nIndex]) || + flowDurations[nIndex] < 0.0) { + setHxPlotError(errorMessage, + QString::fromLatin1("Invalid flow-section duration.")); + return false; + } + dSectionStart += flowDurations[nIndex]; + } + const double dSelectedDuration = flowDurations[flowSectionIndex - 1]; + if(!isReasonableHxPlotValue(dSelectedDuration) || + dSelectedDuration <= 0.0 || + !isReasonableHxPlotValue(dSectionStart + dSelectedDuration)) { + setHxPlotError(errorMessage, + QString::fromLatin1("Invalid selected flow-section range.")); + return false; + } + const double dSectionEnd = dSectionStart + dSelectedDuration; + + // 算法方约定:Rate[0] 为各段时间,Rate[1] 为对应流量。 + nmHxPlotMatrix oRate(2); + oRate[0].reserve(flowDurations.size()); + oRate[1].reserve(rates.size()); + for(int nIndex = 0; nIndex < flowDurations.size(); ++nIndex) { + if(!isReasonableHxPlotValue(flowDurations[nIndex]) || + !isReasonableHxPlotValue(rates[nIndex])) { + setHxPlotError(errorMessage, + QString::fromLatin1("Invalid rate history value.")); + return false; + } + oRate[0].push_back(flowDurations[nIndex]); + oRate[1].push_back(rates[nIndex]); + } + + // 算法方约定:Press[0] 为压力时间,Press[1] 为压力或气井拟压力。 + nmHxPlotMatrix oPressure(2); + oPressure[0].reserve(pressureTimes.size()); + oPressure[1].reserve(pressures.size()); + for(int nIndex = 0; nIndex < pressureTimes.size(); ++nIndex) { + if(!isReasonableHxPlotValue(pressureTimes[nIndex]) || + !isReasonableHxPlotValue(pressures[nIndex])) { + setHxPlotError(errorMessage, + QString::fromLatin1("Invalid pressure history value.")); + return false; + } + oPressure[0].push_back(pressureTimes[nIndex]); + oPressure[1].push_back(pressures[nIndex]); + } + + QMutexLocker oLocker(getHxNwtmDllMutex()); + HMODULE hModule = LoadLibrary(L"HX_NWTM.dll"); + if(hModule == NULL) { + setHxPlotError(errorMessage, + QString::fromLatin1("Failed to load HX_NWTM.dll.")); + return false; + } + + typedef void (*HxNwtmPlotFunction)( + nmHxPlotData&, + const nmHxPlotMatrix&, + const nmHxPlotMatrix&, + const double, + const double, + std::string); + HxNwtmPlotFunction pfnPlot = + reinterpret_cast( + GetProcAddress(hModule, "HX_NWTM_PLOT")); + if(pfnPlot == NULL) { + // 兼容当前尚未提供绘图接口的旧版 HX_NWTM.dll,调用方可继续走旧算法回退。 + FreeLibrary(hModule); + return false; + } + if(interfaceAvailable != 0) { + *interfaceAvailable = true; + } + // 已确认新导出存在后再校验许可证。这样许可证错误不会被误判成“接口不存在”, + // 调用方也就不会错误地回退到旧算法。 + if(licensePath.isEmpty() || !QFileInfo(licensePath).exists()) { + FreeLibrary(hModule); + setHxPlotError(errorMessage, + QString::fromLatin1("HX_NWTM license file was not found.")); + return false; + } + + nmHxPlotData oResult; + // 当前版本 DLL 会直接访问输出矩阵的固定行号,不会先扩展外层 vector。 + // 按接口约定预建双对数 3 行、半对数 2 行,避免空外层数组导致访问冲突。 + oResult.loglog.resize(3); + oResult.semilog.resize(2); + try { + pfnPlot(oResult, + oRate, + oPressure, + dSectionStart, + dSectionEnd, + licensePath.toStdString()); + } catch(const std::exception& oException) { + FreeLibrary(hModule); + setHxPlotError(errorMessage, + QString::fromLatin1("HX_NWTM_PLOT exception: %1") + .arg(QString::fromLocal8Bit(oException.what()))); + return false; + } catch(...) { + FreeLibrary(hModule); + setHxPlotError(errorMessage, + QString::fromLatin1("HX_NWTM_PLOT raised an unknown exception.")); + return false; + } + FreeLibrary(hModule); + + // 输出按列存放,任何列数或点数不匹配都视为第三方接口返回不完整。 + if(oResult.loglog.size() < 3 || oResult.semilog.size() < 2 || + oResult.loglog[0].size() != oResult.loglog[1].size() || + oResult.loglog[0].size() != oResult.loglog[2].size() || + oResult.semilog[0].size() != oResult.semilog[1].size()) { + setHxPlotError(errorMessage, + QString::fromLatin1("HX_NWTM_PLOT returned malformed arrays.")); + return false; + } + + // 双对数坐标要求时间和导数为正;统一过滤首尾占位点和非数值点。 + logLog.resize(3); + for(size_t nIndex = 0; nIndex < oResult.loglog[0].size(); ++nIndex) { + const double dTime = oResult.loglog[0][nIndex]; + const double dPressureDifference = oResult.loglog[1][nIndex]; + const double dDerivative = oResult.loglog[2][nIndex]; + if(!isReasonableHxPlotValue(dTime) || dTime <= 0.0 || + !isReasonableHxPlotValue(dPressureDifference) || + !isReasonableHxPlotValue(dDerivative) || + dDerivative < DBL_EPSILON) { + continue; + } + logLog[0].append(dTime); + logLog[1].append(dPressureDifference); + logLog[2].append(dDerivative); + } + + semiLog.resize(2); + for(size_t nIndex = 0; nIndex < oResult.semilog[0].size(); ++nIndex) { + const double dTime = oResult.semilog[0][nIndex]; + const double dPressure = oResult.semilog[1][nIndex]; + if(!isReasonableHxPlotValue(dTime) || dTime <= 0.0 || + !isReasonableHxPlotValue(dPressure)) { + continue; + } + semiLog[0].append(dTime); + semiLog[1].append(dPressure); + } + + if(logLog[0].isEmpty() || semiLog[0].isEmpty()) { + logLog.clear(); + semiLog.clear(); + setHxPlotError(errorMessage, + QString::fromLatin1("HX_NWTM_PLOT returned no valid plot points.")); + return false; + } + return true; +} + bool nmDataUtils::extendChildrenOfProj(ZxDataProject* pDataProj) { Q_ASSERT (nullptr != pDataProj); diff --git a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp index 65487f02..d4cbb02d 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp @@ -2913,40 +2913,7 @@ void nmSubWndMain::onWellSelected(const QString& sWellInstanceId) // q[i] = vecTimeQ[i + 1].y(); // } // -// // 调用 DLL 计算双对数曲线 -// std::vector logPre; -// int iSectionFlowIndex = pWellData->getIndexF(); -// -// HMODULE hMod_solver = LoadLibrary(L"singlePhaseSolverDll.dll"); -// -// if(hMod_solver) { -// typedef bool (*PreLog)(const std::vector&, const int&, double*, double*, int, std::vector&); -// PreLog preLogFun = (PreLog)GetProcAddress(hMod_solver, "logLogPre"); -// -// if(nullptr == preLogFun) { -// FreeLibrary(hMod_solver); -// std::cout << "preLogFun failed!\n"; -// return; -// } -// -// preLogFun(wellPressureData, iSectionFlowIndex, timeQ.data(), q.data(), nTimeNumQ, logPre); -// -// // 不添加最后一个元素 -// for(uint i = 0; i < logPre.size() - 1; i++) { -// //logFile << logPre[i].x << "\t" << logPre[i].y << "\t" << logPre[i].z << "\t" << std::endl; -// vvecLogPreData[0].append(logPre[i].x); // x -// vvecLogPreData[1].append(logPre[i].y); // y -// vvecLogPreData[2].append(logPre[i].z); // z -// } -// -// // 填充半对数曲线数据 (x, pointData[0]) -// foreach(const auto& point, logPre) { -// vvecSemiLogPreData[0].append(point.x); // x -// double y_value = point.pointData.empty() ? 0.0 : point.pointData[0]; -// vvecSemiLogPreData[1].append(y_value); // pointData[0] 或默认值 -// } -// FreeLibrary(hMod_solver); -// } +// // 压力曲线统一由 HX_NWTM_PLOT 计算,旧曲线库调用示例已删除。 //} void nmSubWndMain::onGenerateButtonClicked() diff --git a/Src4/nmNum/nmCalculation/nmCalculation.pro b/Src4/nmNum/nmCalculation/nmCalculation.pro index 458b09f3..812f913c 100644 --- a/Src4/nmNum/nmCalculation/nmCalculation.pro +++ b/Src4/nmNum/nmCalculation/nmCalculation.pro @@ -31,7 +31,6 @@ INCLUDEPATH += \ $${wtInclude}/nmNum/nmData \ $${wtInclude}/iBase/iDefines \ $${wtInclude}/iBase/iLogs \ - $${geoHome}/3rd/SinglePhaseSolver/include \ $${geoHome}/3rd/Pebi/include INCLUDEPATH += $${geoHome}/3rd/JSON/rapidjson-1.1.0/include/ diff --git a/Src4/nmNum/nmData/nmData.pro b/Src4/nmNum/nmData/nmData.pro index c0842a33..d0b1fb9c 100644 --- a/Src4/nmNum/nmData/nmData.pro +++ b/Src4/nmNum/nmData/nmData.pro @@ -69,7 +69,6 @@ INCLUDEPATH += $${wtInclude}/nmNum/nmData INCLUDEPATH += $${wtInclude}/nmNum/nmXml INCLUDEPATH += $${geoHome}/3rd/JSON/rapidjson-1.1.0/include/ -INCLUDEPATH += $${geoHome}/3rd/SinglePhaseSolver/include INCLUDEPATH += $${geoHome}/3rd/Pebi/include SOURCES += $$files($${wtSrc}/nmNum/nmData/*.cpp)