#pragma once #include #include struct Point { double x, y, z; Point(double x0, double y0) { x = x0; y = y0; } Point() {}; std::vector pointData; // 拷贝构造函数 Point(const Point& other) { //std::cout << "Copy constructor called" << std::endl; x = other.x; // 复制数据 y = other.y; z = other.z; pointData=other.pointData; } }; struct Cell { int type; std::vector pointIndices; std::vector cellData; Cell(const Cell& other) { type = other.type; pointIndices = other.pointIndices; cellData = other.cellData; } Cell() {} }; class CBoundLine { // DECLARE_SERIAL(CBoundLine) public: CBoundLine() { nNodeNum = 8; nboundtype = 0; ddl = 100; bisSel = false; }; virtual ~CBoundLine() {}; Point pPre, pOri; int nboundtype; int nNodeNum; double ddl; int nNodeMin; int nNodeMax; bool bisSel; }; class CWell { // DECLARE_SERIAL(CWell) public: CWell() { nNodeNum = 12; dRc = 0.1; nFlowType = 0; nTimeNumQ = 0; nTimeNumP = 0; dSkin = 0; dC = 0.01; dMinPress = 0.101325; bisSel = false; nDenseNum = 10; dDenseRadius[0] = 1; nDenseNodeNUm[0] = 18; dDenseRadius[1] = 10; nDenseNodeNUm[1] = 23; dDenseRadius[2] = 50; nDenseNodeNUm[2] = 22; dDenseRadius[3] = 100; nDenseNodeNUm[3] = 25; dDenseRadius[4] = 500; nDenseNodeNUm[4] = 26; dDenseRadius[5] = 1000; nDenseNodeNUm[5] = 27; dDenseRadius[6] = 2000; nDenseNodeNUm[6] = 32; dDenseRadius[7] = 3000; nDenseNodeNUm[7] = 34; dDenseRadius[8] = 4000; nDenseNodeNUm[8] = 35; dDenseRadius[9] = 5000; nDenseNodeNUm[9] = 47; dDenseRadius[10] = 10000; nDenseNodeNUm[10] = 48; dDenseRadius[11] = 20000; nDenseNodeNUm[11] = 48; bisAutoChoose = false; bisMultFlow = false; nInComNote = 0; }; virtual ~CWell() {}; void SetDenseValue(); public: //void Serialize(CArchive& ar); std::string sWellname; Point pCenter; int nFlowType; int nNodeNum; double dRc;//¾®Í²°ë¾¶ double dSkin;//±íƤϵÊý double dC;//¾®´¢ÏµÊý double dMinPress;//×îСÁ÷ѹ int nTimeNumQ; int nTimeNumP; double pdTimeQ[100];//井为定产量生产时的时间持续段数组 double pdTimeP[100];//井为定压力生产时的时间持续段数组 double pdQ[100];//井为定产量生产时的产量数组 double pdP[100]; //井为压产量生产时的压力数组 int nNodeMin; int nNodeMax; bool bisSel; int nDenseNum;//¼ÓÃÜȦ¸öÊý double dDenseRadius[20];//¼ÓÃÜȦ°ë¾¶ int nDenseNodeNUm[20];//¼ÓÃÜȦ½ÚµãÊý double dS;//¾àÀë±ß½ç×îСֵ bool bisAutoChoose;//ÊÇ·ñ¾­×Ô¶¯É¸Ñ¡ bool bisMultFlow; int nInComNote; std::vector m_NodeIndex;//all the nodes index of the wellbore std::vector m_PressureData;//计算的井筒压力数据 }; class CBoundCir { // DECLARE_SERIAL(CBoundCir) public: CBoundCir() { nNodeNum = 24; nboundtype = 0; bisSel = false; dComKr = 10; dComW = 3; }; virtual ~CBoundCir() {}; public: Point pCenter; double dRc; int nboundtype; int nNodeNum; bool bisSel; int nNodeMin; int nNodeMax; int nMeshMin; int nMeshMax; double dComKr; double dComW; }; #ifdef __cplusplus extern "C" { #endif __declspec(dllexport) int singlePhaseSolver(double* m_pBaseData, std::vector points, std::vector cells, int m_nWellNum, CWell* pwells, std::vector>& vecBP, std::vector>>& vecNodePre); #ifdef __cplusplus } #endif