diff --git a/3rd/Pebi/include/pch.h b/3rd/Pebi/include/pch.h index 09dee7b..455979c 100644 --- a/3rd/Pebi/include/pch.h +++ b/3rd/Pebi/include/pch.h @@ -15,7 +15,9 @@ #include #include -//const double M_PI = acos(-1.0); +#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 @@ -136,8 +138,8 @@ struct HX_NWTM_GRID_INPUT dVec2 Boundary; //3D:{x0, y0, z0, x1, y1, z1} //2D:{x0, y0, x1, y1} 边界数据 dVec2 VerticalWell; //3D:{x0, y0, z0, x1, y1, z1, rw} //2D:{x0, y0, x1, y1, rw} 直井数据 dVec2 HorizontalWell; //3D:{x0, y0, z0, x1, y1, z1, rw} 水平井数据 - dVec2 FractureVerticalWell; //3D:{x0, y0, z0, x1, y1, z1, wf} //2D:{x0, y0, x1, y1, wf} 压裂直井数据 - dVec3 MultistageFracturedHorizontalWell; //3D:{x0, y0, z0, x1, y1, z1, wf} //2D:{x0, y0, x1, y1, wf} 多级压裂水平井数据 + dVec2 FractureVerticalWell; //3D:{x0, y0, z0, x1, y1, z1, wf} //2D:{x0, y0, x1, y1, wf, FC} 压裂直井数据(wf裂缝半宽,m,FC,裂缝导流能力,mD.m(FC为0时为无限导流,大于0时为有限导流)) + dVec3 MultistageFracturedHorizontalWell; //3D:{x0, y0, z0, x1, y1, z1, wf} //2D:{x0, y0, x1, y1, wf, FC} 多级压裂水平井数据(wf裂缝半宽,m,FC,裂缝导流能力,mD.m(FC为0时为无限导流,大于0时为有限导流)) dVec2 InclinedWell; //3D:{x0, y0, z0, x1, y1, z1, rw} 斜井数据 dVec2 Fault; //3D:{x0, y0, z0, x1, y1, z1} //2D:{x0, y0, x1, y1} 断层数据 double GridControl; // 网格大小控制参数 @@ -146,7 +148,7 @@ struct HX_NWTM_GRID_INPUT //默认初始化 HX_NWTM_GRID_INPUT() { - dVec1 a(3), b(4), c(5); + dVec1 a(3), b(4), c(5), d(6); Boundary.resize(4); b[0] = -1500.0; b[1] = -1500.0; b[2] = -1500.0; b[3] = 1500.0; Boundary[0] = b; b[0] = -1500.0; b[1] = 1500.0; b[2] = 1500.0; b[3] = 1500.0; Boundary[1] = b; @@ -161,18 +163,18 @@ struct HX_NWTM_GRID_INPUT HorizontalWell.resize(0); FractureVerticalWell.resize(1); - c[0] = -200; c[1] = -200; c[2] = 200; c[3] = -200; c[4] = 0.05; FractureVerticalWell[0] = c; + 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)); - c[0] = -600; c[1] = 600; c[2] = -400; c[3] = 600; c[4] = 0.1; MultistageFracturedHorizontalWell[0][0] = c; - c[0] = -600; c[1] = 400; c[2] = -400; c[3] = 400; c[4] = 0.1; MultistageFracturedHorizontalWell[0][1] = c; - c[0] = -600; c[1] = 200; c[2] = -400; c[3] = 200; c[4] = 0.1; MultistageFracturedHorizontalWell[0][2] = c; + 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; InclinedWell.resize(0); Fault.resize(1); - c[0] = -500; c[1] = 1000; c[2] = 500; c[3] = 500; Fault[0] = c; + b[0] = -500; b[1] = 1000; b[2] = 500; b[3] = 500; Fault[0] = b; GridControl = 150.0; @@ -213,6 +215,13 @@ struct HX_NWTM_GRID_OUTPUT2 dVec2 df; dVec1 xf; iVec2 infra; + iVec1 nf; + iVec1 jjf; + iVec1 jjfl; + dVec1 lfcd; + iVec2 infra1; + dVec2 lf1; + dVec2 df1; } LieFengJingNeiBianJie; struct { int n; @@ -222,6 +231,16 @@ struct HX_NWTM_GRID_OUTPUT2 dVec2 dsxf; iVec2 inhor; iVec1 nhor; + dVec2 areah; + iVec2 inhor1; + iVec2 nh; + iVec2 jjh; + dVec2 hfcd; + iVec2 jjhl; + iVec2 jjh2; + iVec2 inhor2; + dVec2 lh1; + dVec2 dh1; } DuoJiYaLieShuiPingJingNeiBianJie; struct { int n; diff --git a/3rd/Pebi/src/main.cpp b/3rd/Pebi/src/main.cpp index 2a83143..6fcecc5 100644 --- a/3rd/Pebi/src/main.cpp +++ b/3rd/Pebi/src/main.cpp @@ -1,17 +1,19 @@ #include"pch.h" +#include +#include void Write2DVectorToCSV(const std::vector>& data, const std::string& filename) { - std::ofstream file(filename.c_str()); // VS2010需使用.c_str() + std::ofstream file(filename.c_str()); // VS2010ʹ.c_str() if (file.is_open()) { for (size_t row = 0; row < data.size(); ++row) { for (size_t col = 0; col < data[row].size(); ++col) { - // 设置固定小数格式和精度 + // ù̶Сʽ; file << std::fixed << std::setprecision(15) << data[row][col]; - // 非最后一列时添加逗号 + // һʱӶ if (col != data[row].size() - 1) { file << ","; } } - file << "\n"; // 换行符 + file << "\n"; // з } file.close(); } @@ -21,11 +23,57 @@ void Write1DVectorToCSV(const std::vector& data, const std::string& file if (file.is_open()) { file << std::fixed << std::setprecision(precision); for (size_t i = 0; i < data.size(); ++i) { - file << data[i] << "\n"; // 每个元素单独一行 + file << data[i] << "\n"; // ÿԪصһ } file.close(); } } +bool readCSVColumn(const std::string& filename, int columnIndex, std::vector& data) { + std::ifstream file(filename); + if (!file.is_open()) { + std::cerr << "޷ļ: " << filename << std::endl; + return false; + } + + std::string line; + // УУ + if (file.good()) { + std::getline(file, line); + } + data.resize(0); + // д + while (std::getline(file, line)) { + std::istringstream ss(line); + std::string cell; + int currentColumn = 0; + bool columnFound = false; + + // ǰеÿԪ + while (std::getline(ss, cell, ',')) { + if (currentColumn == columnIndex) { + try { + // תΪdoubleӵvector + data.push_back(std::stod(cell)); + } + catch (const std::invalid_argument& e) { + std::cerr << "ת: " << cell << " Ч" << std::endl; + return false; + } + columnFound = true; + break; + } + currentColumn++; + } + + // ָвڣ + if (!columnFound) { + std::cerr << ": " << data.size() + 1 << " " << columnIndex << std::endl; + } + } + + file.close(); + return true; +} int main() { @@ -35,19 +83,19 @@ int main() HX_NWTM_GRID_OUTPUT2 p2; - //不同井型算例 - int welltype;//1为一口直井,2为一口压裂直井,3为一口多段压裂水平井,4为五口井(含直井,压裂直井,多段压裂水平井,断层),5为50口直井 + //ͬ + int welltype;//1Ϊһֱ2Ϊһѹֱ3Ϊһڶѹˮƽ4Ϊھ(ֱѹֱѹˮƽϲ)5Ϊ50ֱ welltype = 1; - //模型算例 - int flowtype;//1为油单相常数pvt(一口井),2为油单相常数pvt(五口井),3为油单相常数pvt(五十口井),4为油单相变化pvt(一口井),5为水单相常数pvt(一口井),6为水单相变化pvt(一口井),7为气单相变化pvt(一口井),8为气单相拟压力(一口井),9为油水两相(一口井) + //ģ + int flowtype;//1Ϊ͵ೣpvtһھ2Ϊ͵ೣpvtھ3Ϊ͵ೣpvtʮھ4Ϊ͵仯pvtһھ5Ϊˮೣpvtһھ6Ϊˮ仯pvtһھ7Ϊ仯pvtһھ8Ϊѹһھ9Ϊˮࣨһھ flowtype = 1; - //非均质性 - int feijunzhi = 0;//0为不考虑储层非均质,1为考虑储层非均质 + //Ǿ + int feijunzhi = 0;//0ΪǴǾʣ1ΪǴǾ - //不同井型设置 - dVec1 a(3), b(4), c(5); + //ͬ + dVec1 a(3), b(4), c(5), d(6); if (welltype == 1) { - //一口直井 + //һֱ p0.Boundary.resize(4); b[0] = -1500.0; b[1] = -1500.0; b[2] = -1500.0; b[3] = 1500.0; p0.Boundary[0] = b; b[0] = -1500.0; b[1] = 1500.0; b[2] = 1500.0; b[3] = 1500.0; p0.Boundary[1] = b; @@ -62,7 +110,7 @@ int main() p0.Fault.resize(0); } else if (welltype == 2) { - //一口压裂直井 + //һѹֱ p0.Boundary.resize(4); b[0] = -1500.0; b[1] = -1500.0; b[2] = -1500.0; b[3] = 1500.0; p0.Boundary[0] = b; b[0] = -1500.0; b[1] = 1500.0; b[2] = 1500.0; b[3] = 1500.0; p0.Boundary[1] = b; @@ -71,13 +119,13 @@ int main() p0.VerticalWell.resize(0); p0.HorizontalWell.resize(0); p0.FractureVerticalWell.resize(1); - c[0] = -200; c[1] = 0; c[2] = 200; c[3] = 0; c[4] = 0.05; p0.FractureVerticalWell[0] = c; + d[0] = -200; d[1] = 0; d[2] = 200; d[3] = 0; d[4] = 0.05; d[5] = 100.0; p0.FractureVerticalWell[0] = d; p0.MultistageFracturedHorizontalWell.resize(0); p0.InclinedWell.resize(0); p0.Fault.resize(0); } else if (welltype == 3) { - //一口多段压裂水平井 + //һڶѹˮƽ p0.Boundary.resize(4); b[0] = -1500.0; b[1] = -1500.0; b[2] = -1500.0; b[3] = 1500.0; p0.Boundary[0] = b; b[0] = -1500.0; b[1] = 1500.0; b[2] = 1500.0; b[3] = 1500.0; p0.Boundary[1] = b; @@ -87,19 +135,17 @@ int main() p0.HorizontalWell.resize(0); p0.FractureVerticalWell.resize(0); p0.MultistageFracturedHorizontalWell.resize(1); - p0.MultistageFracturedHorizontalWell[0].resize(7, dVec1(5)); - c[0] = -600; c[1] = -200; c[2] = -600; c[3] = 200; c[4] = 0.05; p0.MultistageFracturedHorizontalWell[0][0] = c; - c[0] = -400; c[1] = -200; c[2] = -400; c[3] = 200; c[4] = 0.05; p0.MultistageFracturedHorizontalWell[0][1] = c; - c[0] = -200; c[1] = -200; c[2] = -200; c[3] = 200; c[4] = 0.05; p0.MultistageFracturedHorizontalWell[0][2] = c; - c[0] = 0; c[1] = -200; c[2] =0; c[3] = 200; c[4] = 0.05; p0.MultistageFracturedHorizontalWell[0][3] = c; - c[0] = 200; c[1] = -200; c[2] = 200; c[3] = 200; c[4] = 0.05; p0.MultistageFracturedHorizontalWell[0][4] = c; - c[0] = 400; c[1] = -200; c[2] = 400; c[3] = 200; c[4] = 0.05; p0.MultistageFracturedHorizontalWell[0][5] = c; - c[0] = 600; c[1] = -200; c[2] = 600; c[3] = 200; c[4] = 0.05; p0.MultistageFracturedHorizontalWell[0][6] = c; + p0.MultistageFracturedHorizontalWell[0].resize(5, dVec1(6)); + d[0] = -400; d[1] = -200; d[2] = -400; d[3] = 200; d[4] = 0.05; d[5] = 100; p0.MultistageFracturedHorizontalWell[0][0] = d; + d[0] = -200; d[1] = -200; d[2] = -200; d[3] = 200; d[4] = 0.05; d[5] = 100; p0.MultistageFracturedHorizontalWell[0][1] = d; + d[0] = 0; d[1] = -200; d[2] =0; d[3] = 200; d[4] = 0.05; d[5] = 100; p0.MultistageFracturedHorizontalWell[0][2] = d; + d[0] = 200; d[1] = -200; d[2] = 200; d[3] = 200; d[4] = 0.05; d[5] = 100; p0.MultistageFracturedHorizontalWell[0][3] = d; + d[0] = 400; d[1] = -200; d[2] = 400; d[3] = 200; d[4] = 0.05; d[5] = 100; p0.MultistageFracturedHorizontalWell[0][4] = d; p0.InclinedWell.resize(0); p0.Fault.resize(0); } else if (welltype == 4) { - //五口井(含直井,压裂直井,多段压裂水平井,断层) + //ھ(ֱѹֱѹˮƽϲ) p0.Boundary.resize(4); b[0] = -1500.0; b[1] = -1500.0; b[2] = -1500.0; b[3] = 1500.0; p0.Boundary[0] = b; b[0] = -1500.0; b[1] = 1500.0; b[2] = 1500.0; b[3] = 1500.0; p0.Boundary[1] = b; @@ -111,18 +157,18 @@ int main() a[0] = -1000; a[1] = -1000; a[2] = 0.1; p0.VerticalWell[2] = a; p0.HorizontalWell.resize(0); p0.FractureVerticalWell.resize(1); - c[0] = -200; c[1] = -200; c[2] = 200; c[3] = -200; c[4] = 0.05; p0.FractureVerticalWell[0] = c; + d[0] = -200; d[1] = -200; d[2] = 200; d[3] = -200; d[4] = 0.05; d[5] = 0; p0.FractureVerticalWell[0] = d; p0.MultistageFracturedHorizontalWell.resize(1); - p0.MultistageFracturedHorizontalWell[0].resize(3, dVec1(5)); - c[0] = -600; c[1] = 600; c[2] = -400; c[3] = 600; c[4] = 0.1; p0.MultistageFracturedHorizontalWell[0][0] = c; - c[0] = -600; c[1] = 400; c[2] = -400; c[3] = 400; c[4] = 0.1; p0.MultistageFracturedHorizontalWell[0][1] = c; - c[0] = -600; c[1] = 200; c[2] = -400; c[3] = 200; c[4] = 0.1; p0.MultistageFracturedHorizontalWell[0][2] = c; + p0.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; p0.MultistageFracturedHorizontalWell[0][0] = d; + d[0] = -600; d[1] = 400; d[2] = -400; d[3] = 400; d[4] = 0.1; d[5] = 0; p0.MultistageFracturedHorizontalWell[0][1] = d; + d[0] = -600; d[1] = 200; d[2] = -400; d[3] = 200; d[4] = 0.1; d[5] = 0; p0.MultistageFracturedHorizontalWell[0][2] = d; p0.InclinedWell.resize(0); p0.Fault.resize(1); - c[0] = -500; c[1] = 1000; c[2] = 500; c[3] = 500; p0.Fault[0] = c; + b[0] = -500; b[1] = 1000; b[2] = 500; b[3] = 500; p0.Fault[0] = b; } else if (welltype == 5) { - //50口直井 + //50ֱ p0.Boundary.resize(4); b[0] = -1000.0; b[1] = -1000.0; b[2] = -1000.0; b[3] = 1000.0; p0.Boundary[0] = b; b[0] = -1000.0; b[1] = 1000.0; b[2] = 1000.0; b[3] = 1000.0; p0.Boundary[1] = b; @@ -188,26 +234,26 @@ int main() p0.GridControl = 150.0; p0.D = 2; - //网格计算 + // HX_NWTM_GRID(p1, p2, p0, "HX_license.dat"); HX_NWTM_MODEL_INPUT p3(p2); HX_NWTM_MODEL_OUTPUT p4; - //模型设置 + //ģ if (flowtype == 1) { - //油单相常数pvt(一口井) + //͵ೣpvtһھ p3.T = 1; p3.Rate.t.resize(1); p3.Rate.qo.resize(1); p3.Rate.t[0].resize(2); p3.Rate.t[0][0] = 2000; p3.Rate.t[0][1] = 500; - p3.Rate.qo[0].resize(2); p3.Rate.qo[0][0] = 10; p3.Rate.qo[0][1] = 0; + p3.Rate.qo[0].resize(2); p3.Rate.qo[0][0] = 20; p3.Rate.qo[0][1] = 0; p3.CS.C.resize(1); - p3.CS.C[0] = 0.1; + p3.CS.C[0] = 0; p3.CS.S.resize(1); - p3.CS.S[0] = 0.1; + p3.CS.S[0] = 0; p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } - p3.PVT.Bo = dVec1(200, 1.2);//所有数为一个值 - p3.PVT.miuo = dVec1(200, 0.5);//所有数为一个值 + p3.PVT.Bo = dVec1(200, 1.2);//Ϊһֵ + p3.PVT.miuo = dVec1(200, 0.5);//Ϊһֵ p3.Base.Pi = 40.0; p3.Base.Cti = 1e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); @@ -218,7 +264,7 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 2) { - //油单相常数pvt(五口井) + //͵ೣpvtھ p3.T = 1; p3.Rate.t.resize(5); p3.Rate.qo.resize(5); @@ -241,8 +287,8 @@ int main() p3.CS.S.resize(5); p3.CS.S[0] = 0.1; p3.CS.S[1] = 0.1; p3.CS.S[2] = 0.1; p3.CS.S[3] = 0.1; p3.CS.S[4] = 0.1; p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } - p3.PVT.Bo = dVec1(200, 1.2);//所有数为一个值 - p3.PVT.miuo = dVec1(200, 0.5);//所有数为一个值 + p3.PVT.Bo = dVec1(200, 1.2);//Ϊһֵ + p3.PVT.miuo = dVec1(200, 0.5);//Ϊһֵ p3.Base.Pi = 40.0; p3.Base.Cti = 1e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); @@ -253,7 +299,7 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 3) { - //油单相常数pvt(五十口井) + //͵ೣpvtʮھ p3.T = 1; dVec1 t; t.push_back(12); @@ -274,8 +320,8 @@ int main() p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } - p3.PVT.Bo = dVec1(200, 1.07);//所有数为一个值 - p3.PVT.miuo = dVec1(200, 0.79);//所有数为一个值 + p3.PVT.Bo = dVec1(200, 1.07);//Ϊһֵ + p3.PVT.miuo = dVec1(200, 0.79);//Ϊһֵ p3.Base.Pi = 40; p3.Base.Cti = 0.43e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.025); @@ -286,7 +332,7 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 4) { - //油单相变化pvt(一口井) + //͵仯pvtһھ p3.T = 2; p3.Rate.t.resize(1); p3.Rate.qo.resize(1); @@ -297,9 +343,9 @@ int main() p3.CS.S.resize(1); p3.CS.S[0] = 0.1; p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } - p3.PVT.Bo = dVec1(200, 1.2);//数值随压力变化 - p3.PVT.miuo = dVec1(200, 0.5);//数值随压力变化 - p3.PVT.Co = dVec1(200, 0.001);//数值随压力变化 + p3.PVT.Bo = dVec1(200, 1.2);//ֵѹ仯 + p3.PVT.miuo = dVec1(200, 0.5);//ֵѹ仯 + p3.PVT.Co = dVec1(200, 0.001);//ֵѹ仯 p3.Base.Pi = 40.0; p3.Base.Cf = 1e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); @@ -310,7 +356,7 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 5) { - //水单相常数pvt(一口井) + //ˮೣpvtһھ p3.T = 3; p3.Rate.t.resize(1); p3.Rate.qw.resize(1); @@ -321,8 +367,8 @@ int main() p3.CS.S.resize(1); p3.CS.S[0] = 0.1; 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);//所有数为一个值 + p3.PVT.Bw = dVec1(200, 1.05);//Ϊһֵ + p3.PVT.miuw = dVec1(200, 0.8);//Ϊһֵ p3.Base.Pi = 40.0; p3.Base.Cti = 1e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); @@ -333,7 +379,7 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 6) { - //水单相变化pvt(一口井) + //ˮ仯pvtһھ p3.T = 4; p3.Rate.t.resize(1); p3.Rate.qw.resize(1); @@ -344,9 +390,9 @@ int main() p3.CS.S.resize(1); p3.CS.S[0] = 0.1; 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);//数值随压力变化 - p3.PVT.Cw = dVec1(200, 0.0001);//数值随压力变化 + p3.PVT.Bw = dVec1(200, 1.05);//ֵѹ仯 + p3.PVT.miuw = dVec1(200, 0.8);//ֵѹ仯 + p3.PVT.Cw = dVec1(200, 0.0001);//ֵѹ仯 p3.Base.Pi = 40.0; p3.Base.Cf = 1e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); @@ -357,7 +403,7 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 7) { - //气单相变化pvt(一口井) + //仯pvtһھ p3.T = 5; p3.Rate.t.resize(1); p3.Rate.qg.resize(1); @@ -368,9 +414,9 @@ int main() p3.CS.S.resize(1); p3.CS.S[0] = 0.1; p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } - p3.PVT.Bg = dVec1(200, 5e-3);//数值随压力变化 - p3.PVT.miug = dVec1(200, 2e-2);//数值随压力变化 - p3.PVT.Cg = dVec1(200, 2e-2);//数值随压力变化 + p3.PVT.Bg = dVec1(200, 5e-3);//ֵѹ仯 + p3.PVT.miug = dVec1(200, 2e-2);//ֵѹ仯 + p3.PVT.Cg = dVec1(200, 2e-2);//ֵѹ仯 p3.Base.Pi = 40.0; p3.Base.Cf = 1e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); @@ -381,7 +427,7 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 8) { - //气单相拟压力(一口井) + //ѹһھ p3.T = 6; p3.Rate.t.resize(1); p3.Rate.qg.resize(1); @@ -392,9 +438,9 @@ int main() p3.CS.S.resize(1); p3.CS.S[0] = 0.1; p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } - p3.PVT.Bg = dVec1(200, 5e-3);//数值随压力变化 - p3.PVT.miug = dVec1(200, 2e-2);//数值随压力变化 - p3.PVT.Cg = dVec1(200, 2e-2);//数值随压力变化 + p3.PVT.Bg = dVec1(200, 5e-3);//ֵѹ仯 + p3.PVT.miug = dVec1(200, 2e-2);//ֵѹ仯 + p3.PVT.Cg = dVec1(200, 2e-2);//ֵѹ仯 p3.Base.Pi = 40.0; p3.Base.Cf = 1e-3; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); @@ -405,35 +451,45 @@ int main() p3.Base.dt_Max = 12.5; } else if (flowtype == 9) { - //油水两相(一口井) + //ˮࣨһھ p3.T = 8; p3.Rate.t.resize(1); p3.Rate.qg.resize(1); p3.Rate.t[0].resize(2); p3.Rate.t[0][0] = 2000; p3.Rate.t[0][1] = 500; - //定产油量 - p3.Rate.qo[0].resize(2); p3.Rate.qo[0][0] = 10; p3.Rate.qo[0][1] = 0; + // + p3.Rate.qo[0].resize(2); p3.Rate.qo[0][0] = 20; p3.Rate.qo[0][1] = 0; p3.Rate.qw[0].resize(2); p3.Rate.qw[0][0] = 0; p3.Rate.qw[0][1] = 0; - ////定产液量 - //p3.Rate.qo[0].resize(2); p3.Rate.qo[0][0] = 10; p3.Rate.qo[0][1] = 0; - //p3.Rate.qw[0].resize(2); p3.Rate.qw[0][0] = 10; p3.Rate.qw[0][1] = 0; - ////定注水量 + ////Һ + //p3.Rate.qo[0].resize(2); p3.Rate.qo[0][0] = 15; p3.Rate.qo[0][1] = 0; + //p3.Rate.qw[0].resize(2); p3.Rate.qw[0][0] = 5; p3.Rate.qw[0][1] = 0; + ////עˮ //p3.Rate.qo[0].resize(2); p3.Rate.qo[0][0] = 0; p3.Rate.qo[0][1] = 0; - //p3.Rate.qw[0].resize(2); p3.Rate.qw[0][0] = -10; p3.Rate.qw[0][1] = 0; + //p3.Rate.qw[0].resize(2); p3.Rate.qw[0][0] = -20; p3.Rate.qw[0][1] = 0; p3.CS.C.resize(1); p3.CS.C[0] = 0.1; p3.CS.S.resize(1); p3.CS.S[0] = 0.1; - p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } - p3.PVT.Bo = dVec1(200, 1.2);//数值随压力变化 - p3.PVT.miuo = dVec1(200, 0.5);//数值随压力变化 - p3.PVT.Bw = dVec1(200, 1.05);//数值随压力变化 - p3.PVT.miuw = dVec1(200, 0.8);//数值随压力变化 - p3.PVT.So = dVec1(81, 0); for (int i = 0; i < 81; ++i) { p3.PVT.So[i] = (0.1 + i * 0.01); } - p3.PVT.Kro = dVec1(81, 0); for (int i = 0; i < 81; ++i) { p3.PVT.Kro[i] = (i*0.0125); } - p3.PVT.Krw = dVec1(81, 0); for (int i = 0; i < 81; ++i) { p3.PVT.Krw[i] = (1 - i * 0.0125); } + //p3.PVT.p = dVec1(200, 0); for (int i = 0; i < 200; ++i) { p3.PVT.p[i] = (i + 1.0); } + //p3.PVT.Bo = dVec1(200, 1.2);//ֵѹ仯 + //p3.PVT.miuo = dVec1(200, 0.5);//ֵѹ仯 + //p3.PVT.Bw = dVec1(200, 1.05);//ֵѹ仯 + //p3.PVT.miuw = dVec1(200, 0.8);//ֵѹ仯 + //p3.PVT.So = dVec1(81, 0); for (int i = 0; i < 81; ++i) { p3.PVT.So[i] = (0.1 + i * 0.01); } + //p3.PVT.Kro = dVec1(81, 0); for (int i = 0; i < 81; ++i) { p3.PVT.Kro[i] = (i*0.0125); } + //p3.PVT.Krw = dVec1(81, 0); for (int i = 0; i < 81; ++i) { p3.PVT.Krw[i] = (1 - i * 0.0125); } + + readCSVColumn("PVT_ow.csv", 5, p3.PVT.miuo); + readCSVColumn("PVT_ow.csv", 4, p3.PVT.Bo); + readCSVColumn("PVT_ow.csv", 2, p3.PVT.miuw); + readCSVColumn("PVT_ow.csv", 1, p3.PVT.Bw); + readCSVColumn("PVT_ow.csv", 0, p3.PVT.p); + readCSVColumn("Krow.csv", 0, p3.PVT.So); + readCSVColumn("Krow.csv", 2, p3.PVT.Kro); + readCSVColumn("Krow.csv", 1, p3.PVT.Krw); + p3.Base.Pi = 40.0; - p3.Base.Cf = 1e-3; + p3.Base.Cf = 1e-4; p3.Base.Swi = 0.2; p3.Base.k = dVec1(p2.Trinodexy.size(), 0.001); p3.Base.phi = dVec1(p2.Trinodexy.size(), 0.1); @@ -443,7 +499,7 @@ int main() p3.Base.dt_Max = 12.5; } - //非均质性设置 + //Ǿ if (feijunzhi == 1) { dVec2 k; a[0] = -1000; a[1] = -800; a[2] = 0.001; k.push_back(a); @@ -484,11 +540,11 @@ int main() file.close();*/ } - //模型计算 + //ģͼ HX_NWTM_MODEL(p4, p3, "HX_license.dat"); - //数据导出 + //ݵ Write1DVectorToCSV(p4.t, "t.csv"); Write2DVectorToCSV(p4.pw, "pw.csv"); Write2DVectorToCSV(p4.p, "C2.csv"); diff --git a/Bin/Res/license/HXNWTM_license.dat b/Bin/Res/license/HXNWTM_license.dat index 98362c9..5e45563 100644 --- a/Bin/Res/license/HXNWTM_license.dat +++ b/Bin/Res/license/HXNWTM_license.dat @@ -1 +1 @@ -7d534fb716ec6521f938 \ No newline at end of file +7d534fb716ed6121f939 \ No newline at end of file