Exemplo n.º 1
0
        private void btnCalResult_Click(object sender, EventArgs e)
        {
            sSelectedLayer = cbbSelectedLayerName.SelectedItem.ToString();
            List <ItemDicLayerDataStatic> listDicLayer        = cIODicLayerDataStatic.readDicLayerData2struct();
            ItemDicLayerDataStatic        wellInjectLayerdata = listDicLayer.Find(p => p.sJH == this.cbbWellInject.SelectedItem.ToString() &&
                                                                                  p.sXCM == sSelectedLayer);

            for (int i = 0; i < dgvInj2Pro.RowCount - 1; i++)
            {
                string sJHProdcut = dgvInj2Pro.Rows[i].Cells[1].Value.ToString();
                ItemDicLayerDataStatic wellProductLayerdata = listDicLayer.Find(p => p.sJH == sJHProdcut &&
                                                                                p.sXCM == sSelectedLayer);
                //计算井距
                double distance = cCalDistance.calDistance2D(wellInjectLayerdata.dbX, wellInjectLayerdata.dbY, wellProductLayerdata.dbX, wellProductLayerdata.dbY);
                dgvInj2Pro.Rows[i].Cells[2].Value = distance.ToString("0.0");
                //根据井号和小层名查累积射开厚度
                ItemDicPerforation performItem = cIOinputWellPerforation.getItemByJHandXCM(sJHProdcut, sSelectedLayer);
                dgvInj2Pro.Rows[i].Cells[3].Value = performItem.fSKHD.ToString("0.0");
                //根据井号和小层名查吸水比例
                ItemDicInjectProfile profileItem = cIOinputInjectProfile.getItemByJHandXCM(sJHProdcut, sSelectedLayer);
                dgvInj2Pro.Rows[i].Cells[4].Value = profileItem.fPercentZR.ToString("0.0");
                dgvInj2Pro.Rows[i].Cells[5].Value = profileItem.fXSHD.ToString("0.0");
                //小层数据表选项
                dgvInj2Pro.Rows[i].Cells[6].Value = wellProductLayerdata.fKXD.ToString("0.0");
                dgvInj2Pro.Rows[i].Cells[7].Value = wellProductLayerdata.fSTL.ToString("0.0");
                dgvInj2Pro.Rows[i].Cells[8].Value = sSelectedLayer;
            }


            //  cCalDistance.calWellHeadWellDistance(sInjectWellSelected, ltStrSelectedJH, fileName);
            //cPublicMethodForm.read2DataGridViewByTextFile(fileName, this.dgvInj2Pro);
        }
Exemplo n.º 2
0
        public static List <ItemDicLayerDataStatic> readDicLayerData2struct()
        {
            List <ItemDicLayerDataStatic> ltStrReturn = new List <ItemDicLayerDataStatic>();
            int iLineIndex = 0;

            if (File.Exists(cProjectManager.filePathLayerDataDic))
            {
                using (StreamReader sr = new StreamReader(cProjectManager.filePathLayerDataDic))
                {
                    String line;
                    while ((line = sr.ReadLine()) != null) //delete the line whose legth is 0
                    {
                        iLineIndex++;
                        if (iLineIndex > 1)
                        {
                            ltStrReturn.Add(ItemDicLayerDataStatic.parseLine(line));
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("请先计算小层数据表。");
            }

            return(ltStrReturn);
        }
Exemplo n.º 3
0
        private void btnCalResult_Click(object sender, EventArgs e)
        {
            string sInjectWellSelected = this.cbbJH.SelectedItem.ToString();

            List <string> ltSelectedJH = cPublicMethodForm.ltStrSelectedItemsReturnFromListBox(listBoxJH);

            string fileName = Path.Combine(cProjectManager.dirPathTemp, sInjectWellSelected + "-WellDistance.txt");

            string sXCM = cbbXCM.SelectedItem.ToString();
            string sJH  = cbbJH.SelectedItem.ToString();


            List <ItemDicLayerDataStatic> listCurrentLayerData = cIODicLayerDataStatic.readDicLayerData2struct().FindAll(p => p.sXCM == sXCM);
            ItemDicLayerDataStatic        currentItem          = listCurrentLayerData.Find(p => p.sJH == sJH);

            StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8);

            if (listCurrentLayerData.Count > 0)
            {
                foreach (ItemDicLayerDataStatic goalItem in listCurrentLayerData.FindAll(p => ltSelectedJH.Contains(p.sJH)))
                {
                    List <string> ltStrWrited = new List <string>();
                    double        distance    = cCalDistance.calDistance2D(currentItem.dbX, currentItem.dbY, goalItem.dbX, goalItem.dbY);
                    ltStrWrited.Add(sXCM);
                    ltStrWrited.Add(sJH);
                    ltStrWrited.Add(goalItem.sJH);
                    ltStrWrited.Add(distance.ToString("0.00"));
                    sw.WriteLine(string.Join("\t", ltStrWrited.ToArray()));
                }
            }

            sw.Close();

            cPublicMethodForm.read2DataGridViewByTextFile(fileName, this.dgvWellDistance);
        }
Exemplo n.º 4
0
 public ItemWellMapPosition(ItemDicLayerDataStatic item)
 {
     this.sJH       = item.sJH;
     this.sXCM      = item.sXCM;
     this.dbX       = item.dbX;
     this.dbY       = item.dbY;
     this.dbTop     = item.fDS1_md;
     this.dbBot     = item.fDS2_md;
     this.iWellType = cProjectData.ltProjectWell.Find(p => p.sJH == item.sJH).iWellType;
 }
Exemplo n.º 5
0
        void initialDataFromXMLfile()
        {
            XmlDocument xmlLayerMap = new XmlDocument();

            xmlLayerMap.Load(filePathLayerCss);
            XmlNode xnLayer = xmlLayerMap.SelectSingleNode("/LayerMapConfig/BaseInfor/XCM");

            if (xnLayer != null)
            {
                sSelectLayer = xnLayer.InnerText;
            }
            XmlNode xnYM = xmlLayerMap.SelectSingleNode("/LayerMapConfig/BaseInfor/YM");

            if (xnYM != null)
            {
                sSelectYM = xnYM.InnerText;
            }

            //如果存在 静态数据节点 赋值

            XmlNode xnStatic = xmlLayerMap.SelectSingleNode("/LayerMapConfig/DataDicStatic");

            if (xnStatic != null && xnStatic.Attributes["XCM"].Value == sSelectLayer)
            {
                XmlNodeList xnlist = xnStatic.SelectNodes("data/item");
                //解析进List
                listLayersDataCurrentLayerStatic.Clear();
                foreach (XmlNode xn in xnlist)
                {
                    listLayersDataCurrentLayerStatic.Add(ItemDicLayerDataStatic.parseLine(xn.InnerText));
                }
            }

            //如果存在 存在动态数据节点 赋值
            XmlNode xnDynamic = xmlLayerMap.SelectSingleNode("/LayerMapConfig/DataDicDynamic");

            if (xnDynamic != null && xnDynamic.Attributes["XCM"].Value == sSelectLayer && xnDynamic.Attributes["YM"].Value == sSelectYM)
            {
                XmlNodeList xnlist = xnStatic.SelectNodes("item");
                //解析进List
                //listLayersDataCurrentLayerDynamic.Clear();
                //foreach (XmlNode xn in xnlist)
                //{
                //    listLayersDataCurrentLayerDynamic.Add(ItemDicLayerDataDynamic.parseLine(xn.InnerText));
                //}
            }
        }
Exemplo n.º 6
0
        public static List <ItemDicLayerDataStatic> getListLayerDataDicItemFromLayerDataDicByXCM(string sXCM)
        {
            List <ItemDicLayerDataStatic> ltStrReturn = new List <ItemDicLayerDataStatic>();

            string[] split;
            int      iLineIndex = 0;

            using (StreamReader sr = new StreamReader(cProjectManager.filePathLayerDataDic))
            {
                String line;

                while ((line = sr.ReadLine()) != null) //delete the line whose legth is 0
                {
                    iLineIndex++;
                    ItemDicLayerDataStatic sttLayerDataDicItem = new ItemDicLayerDataStatic();
                    split = line.Trim().Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                    if (iLineIndex > 1 && split.Count() >= 12 && split[1] == sXCM)
                    {
                        sttLayerDataDicItem.sJH  = split[0];
                        sttLayerDataDicItem.sXCM = split[1];

                        sttLayerDataDicItem.dbX = double.Parse(split[2]);
                        sttLayerDataDicItem.dbY = double.Parse(split[3]);
                        sttLayerDataDicItem.dbZ = double.Parse(split[4]);

                        sttLayerDataDicItem.fSH   = float.Parse(split[5]);
                        sttLayerDataDicItem.fYXHD = float.Parse(split[6]);

                        sttLayerDataDicItem.fKXD     = float.Parse(split[7]);
                        sttLayerDataDicItem.fSTL     = float.Parse(split[8]);
                        sttLayerDataDicItem.fBHD     = float.Parse(split[9]);
                        sttLayerDataDicItem.fDS1_md  = float.Parse(split[10]);
                        sttLayerDataDicItem.fDS2_md  = float.Parse(split[11]);
                        sttLayerDataDicItem.fDS1_TVD = float.Parse(split[12]);
                    }
                }
            }



            return(ltStrReturn);
        }
Exemplo n.º 7
0
        public static string item2string(ItemDicLayerDataStatic item)
        {
            List <string> ltStrWrited = new List <string>();

            ltStrWrited.Add(item.sJH);
            ltStrWrited.Add(item.sXCM);
            ltStrWrited.Add(item.dbX.ToString());
            ltStrWrited.Add(item.dbY.ToString());
            ltStrWrited.Add(item.dbZ.ToString());
            ltStrWrited.Add(item.fDCHD.ToString());
            ltStrWrited.Add(item.fSH.ToString());
            ltStrWrited.Add(item.fYXHD.ToString());
            ltStrWrited.Add(item.fKXD.ToString());
            ltStrWrited.Add(item.fSTL.ToString());
            ltStrWrited.Add(item.fBHD.ToString());
            ltStrWrited.Add(item.fDS1_md.ToString());
            ltStrWrited.Add(item.fDS2_md.ToString());
            ltStrWrited.Add(item.fDS1_TVD.ToString());
            return(string.Join("\t", ltStrWrited.ToArray()));
        }
Exemplo n.º 8
0
        private void btnSelectWorkWells_Click(object sender, EventArgs e)
        {
            if (rdbALLayer.Checked == true)
            {
                listLayersDataCurrentLayerDynamic = cIODicLayerDataDynamic.readDicLayerData2struct(sSelectYM, cProjectData.sAllLayer);
            }
            else
            {
                listLayersDataCurrentLayerDynamic = cIODicLayerDataDynamic.readDicLayerData2struct(sSelectYM, sSelectLayer);
            }
            //增加当前动态字典数据
            cXMLLayerMapDynamic.addWellDynamicDataDic2XML(filePathOperate, sSelectYM, sSelectLayer, listLayersDataCurrentLayerDynamic);

            List <ItemWellMapPosition> listWellsDynamic = new List <ItemWellMapPosition>();

            foreach (ItemDicLayerDataDynamic itemDynamicLayerData in listLayersDataCurrentLayerDynamic)
            {
                ItemWellMapPosition itemWellDynamic = new ItemWellMapPosition();
                if (itemDynamicLayerData.iWellType != 0) //remove well not work
                {
                    itemWellDynamic.sJH  = itemDynamicLayerData.sJH;
                    itemWellDynamic.sXCM = sSelectLayer; //here use globe sSelectLayer because user may select ALLLayerData
                    ItemDicLayerDataStatic itemStaitic = listLayersDataCurrentLayerStatic.Find(p => p.sJH == itemWellDynamic.sJH && p.sXCM == sSelectLayer);
                    itemWellDynamic.dbX = itemStaitic.dbX;
                    itemWellDynamic.dbY = itemStaitic.dbY;

                    itemWellDynamic.iWellType = itemDynamicLayerData.iWellType;

                    listWellsDynamic.Add(itemWellDynamic);
                }
            }
            ////增加当前生产井井位图层
            //cXMLLayerMapStatic.addLayerWellPosition2XML(filePathOperate, sSelectLayer + "_" + sSelectYM, listWellsDynamic);
            ////增加日产日注分析
            //if (listLayersDataCurrentLayerDynamic.Count > 0)
            //    cPublicMethodForm.setListBoxwithltStr(lbxSelectDynamicJH, listWellsDynamic.Select(p => p.sJH).ToList());
        }
Exemplo n.º 9
0
        private void 查看剖面ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sSelectJH = sCurrentID;
            ItemDicLayerDataStatic curItem = listLayersDataCurrentLayerStatic.SingleOrDefault(p => p.sJH == sSelectJH && p.sXCM == sSelectLayer);
            float fTop = 0;
            float fBot = 5000;

            if (curItem != null)
            {
                fTop = curItem.fDS1_md;
                fBot = curItem.fDS2_md;
            }
            string filePathOper = Path.Combine(cProjectManager.dirPathWellDir, sSelectJH, sSelectJH + cProjectManager.fileExtensionSectionWell);

            if (File.Exists(filePathOper))
            {
                FormSectionWell newSectionWeb = new FormSectionWell(filePathOper, fTop, fBot);
                newSectionWeb.WindowState = FormWindowState.Normal;
                newSectionWeb.Size        = new Size(300, 300);
                //newSectionWeb.StartPosition = FormStartPosition.Manual;
                newSectionWeb.Location = pXY.ToPoint();
                newSectionWeb.setViewMode();
                newSectionWeb.FormBorderStyle = FormBorderStyle.SizableToolWindow;
                newSectionWeb.TopLevel        = true;
                newSectionWeb.wellPanelMain.webBrowserHead.Visible       = false;
                newSectionWeb.wellPanelMain.lblCrossV.Visible            = false;
                newSectionWeb.wellPanelMain.lblCrossH.Visible            = false;
                newSectionWeb.wellPanelMain.lblmarker.Visible            = false;
                newSectionWeb.wellPanelMain.statusStripWellPanel.Visible = false;
                newSectionWeb.Show();
            }
            else
            {
                MessageBox.Show("单井综合图不存在。");
            }
        }
Exemplo n.º 10
0
        public static ItemDicLayerDataStatic parseLine(string line)
        {
            string[] split = line.Trim().Split(new char[] { ' ', '\t', ',' }, StringSplitOptions.RemoveEmptyEntries);
            ItemDicLayerDataStatic item = new ItemDicLayerDataStatic();

            if (split.Count() >= 12)
            {
                item.sJH  = split[0];
                item.sXCM = split[1];
                item.dbX  = 0.0;
                double.TryParse(split[2], out item.dbX);
                item.dbY = 0;
                double.TryParse(split[3], out item.dbY);
                item.dbZ = 0;
                double.TryParse(split[4], out item.dbZ);
                item.fDCHD = 0.0f;
                float.TryParse(split[5], out item.fDCHD);
                item.fSH = 0.0f;
                float.TryParse(split[6], out item.fSH);
                item.fYXHD = 0.0f;
                float.TryParse(split[7], out item.fYXHD);
                item.fKXD = 0.0f;
                float.TryParse(split[8], out item.fKXD);
                item.fSTL = 0.0f;
                float.TryParse(split[9], out item.fSTL);
                item.fBHD = 0.0f;
                float.TryParse(split[10], out item.fBHD);
                item.fDS1_md = 0.0f;
                float.TryParse(split[11], out item.fDS1_md);
                item.fDS2_md = 0.0f;
                float.TryParse(split[12], out item.fDS2_md);
                item.fDS1_TVD = 0.0f;
                float.TryParse(split[13], out item.fDS1_TVD);
            }
            return(item);
        }
Exemplo n.º 11
0
        public void generateLayerData()
        {
            //更新算法,保证计算后的数据字典完善:
            //如果这口井有有效厚度而没有孔隙度,渗透率,饱和度,那么找临近的几口井,根据厚度相近的原则,取孔隙度,渗透率
            //数据缺失的先用地层厚度为-999填充标记,然后正着扫一遍,再反着扫一遍 把所有的值填充合理
            List <ItemDicLayerDataStatic> listLayerDataDic = new List <ItemDicLayerDataStatic>();

            if (cProjectData.ltStrProjectJH.Count > 0 && cProjectData.ltStrProjectXCM.Count > 0)
            {
                for (int i = 0; i < cProjectData.ltStrProjectJH.Count; i++)
                {
                    for (int j = 0; j < cProjectData.ltStrProjectXCM.Count; j++)
                    {
                        string                   sCurrentJH      = cProjectData.ltStrProjectJH[i].ToString();
                        string                   sCurrentXCM     = cProjectData.ltStrProjectXCM[j].ToString();
                        ItemWellHead             currentWellHead = cIOinputWellHead.getWellHeadByJH(sCurrentJH);
                        List <ItemDicLayerDepth> listLayerDepth  = cIOinputLayerDepth.readLayerDepth2Struct(sCurrentJH);
                        List <ItemJSJL>          listJSJL        = cIOinputJSJL.readJSJL2Struct(sCurrentJH);

                        double dfCurrentLayerX = 0;
                        double dfCurrentLayerY = 0;
                        double dfCurrentLayerZ = 0;

                        float fCurrentLayerDS1           = 0;    //当前层位的顶面测深
                        float fCurrentLayerDS2           = 0;    //当前层位的底面测深
                        float fCurrentLayerTVD           = 0;    //顶面TVD
                        float fCurrentLayerDCHD          = -999; //当前层位的地层测深 需要测算 -999代表缺失
                        float fCurrentLayerSandThickness = -999; //当前层位的砂岩厚度
                        float fCurrentLayerYXHD          = 0;    //当前层位的有效厚度

                        float fCurrentLayerKXD = 0;              //当前层位的厚度加权孔隙度
                        float fCurrentLayerSTL = 0;              //当前层位的厚度加权渗透率
                        float fCurrentLayerBHD = 0;              //当前层位的厚度加权饱和度


                        //读取层位顶底深,获取fCurrentLayerDS1,fCurrentLayerDS2
                        //没找到的情况要重新考虑下!
                        bool bFoundInLayerDepth             = false;
                        ItemDicLayerDepth currentLayerDepth = listLayerDepth.Find(p => p.sJH == sCurrentJH && p.sXCM == sCurrentXCM);

                        if (currentLayerDepth.sJH != null && currentLayerDepth.fDS1 <= currentLayerDepth.fDS2)
                        {
                            fCurrentLayerDS1 = currentLayerDepth.fDS1;
                            ItemDicWellPath currentDS1WellPathItem = cIOinputWellPath.getWellPathItemByJHAndMD(sCurrentJH, fCurrentLayerDS1);
                            ItemDicWellPath currentDS2WellPathItem = cIOinputWellPath.getWellPathItemByJHAndMD(sCurrentJH, fCurrentLayerDS2);
                            fCurrentLayerDS2   = currentLayerDepth.fDS2;
                            dfCurrentLayerX    = currentDS1WellPathItem.dbX;
                            dfCurrentLayerY    = currentDS1WellPathItem.dbY;
                            dfCurrentLayerZ    = currentDS1WellPathItem.dfZ;
                            fCurrentLayerTVD   = currentDS1WellPathItem.f_TVD;
                            fCurrentLayerDCHD  = currentDS2WellPathItem.f_TVD - currentDS1WellPathItem.f_TVD;
                            bFoundInLayerDepth = true;
                        }

                        //读取JSJL结果链表,获取fCurrentLayerKXD,fCurrentLayerSTL,fCurrentLayerBHD
                        if (bFoundInLayerDepth == true) //找到小层顶底深,才处理,否则直接跳过
                        {
                            List <ItemJSJL> listCurrentWellJSJL = listJSJL.Where(p => p.sJH == sCurrentJH && p.fDS1 >= fCurrentLayerDS1 && p.fDS2 <= fCurrentLayerDS2).ToList();

                            List <float> fListSH_temp   = new List <float>();
                            List <float> fListYXHD_temp = new List <float>();
                            List <float> fListKXD_temp  = new List <float>();
                            List <float> fListSTL_temp  = new List <float>();
                            List <float> fListBHD_temp  = new List <float>();

                            foreach (ItemJSJL item in listCurrentWellJSJL)
                            {
                                fListSH_temp.Add(item.fSandThickness);
                                fListYXHD_temp.Add(item.fNetPaySand);
                                fListKXD_temp.Add(item.fKXD);
                                fListSTL_temp.Add(item.fSTL);
                                fListBHD_temp.Add(item.fBHD);
                            }

                            {
                                fCurrentLayerDCHD          = fCurrentLayerDS2 - fCurrentLayerDS1;                       //地层厚度
                                fCurrentLayerSandThickness = fListSH_temp.Sum();                                        //当前层位的砂岩厚度
                                fCurrentLayerYXHD          = fListYXHD_temp.Sum();                                      //当前层位的有效厚度

                                fCurrentLayerKXD = weightedBYThickNessWithourInvalidValue(fListKXD_temp, fListSH_temp); //当前层位的厚度加权孔隙度
                                fCurrentLayerSTL = weightedBYThickNessWithourInvalidValue(fListSTL_temp, fListSH_temp); //当前层位的厚度加权渗透率
                                fCurrentLayerBHD = weightedBYThickNessWithourInvalidValue(fListBHD_temp, fListSH_temp); //当前层位的厚度加权饱和度
                            }
                        }

                        //写小层数据表

                        ItemDicLayerDataStatic itemLayerData = new ItemDicLayerDataStatic();
                        itemLayerData.sJH  = sCurrentJH;
                        itemLayerData.sXCM = sCurrentXCM;


                        //在LayerDepth表中找到数据层段的顶底
                        if (bFoundInLayerDepth == true)
                        {
                            itemLayerData.dbX      = dfCurrentLayerX;
                            itemLayerData.dbY      = dfCurrentLayerY;
                            itemLayerData.dbZ      = dfCurrentLayerZ;
                            itemLayerData.fDCHD    = fCurrentLayerDCHD;
                            itemLayerData.fSH      = fCurrentLayerSandThickness;
                            itemLayerData.fYXHD    = fCurrentLayerYXHD;
                            itemLayerData.fKXD     = fCurrentLayerKXD;
                            itemLayerData.fSTL     = fCurrentLayerSTL;
                            itemLayerData.fBHD     = fCurrentLayerBHD;
                            itemLayerData.fDS1_md  = fCurrentLayerDS1;
                            itemLayerData.fDS2_md  = fCurrentLayerDS2;
                            itemLayerData.fDS1_TVD = fCurrentLayerTVD;
                        }
                        else //未在LayerDepth表中找到数据 代表本井本层位缺失
                        {
                            itemLayerData.dbX      = 0.0;
                            itemLayerData.dbY      = 0.0;
                            itemLayerData.dbZ      = 0.0;
                            itemLayerData.fDCHD    = -999;
                            itemLayerData.fSH      = -999;
                            itemLayerData.fYXHD    = 0;
                            itemLayerData.fKXD     = -999;
                            itemLayerData.fSTL     = -999;
                            itemLayerData.fBHD     = -999;
                            itemLayerData.fDS1_md  = -999;
                            itemLayerData.fDS2_md  = -999;
                            itemLayerData.fDS1_TVD = -999;
                        }
                        listLayerDataDic.Add(itemLayerData);
                    }
                }
            }

            //正一遍 倒一遍,完善小层数据表

            for (int i = 0; i < listLayerDataDic.Count - 1; i++)
            {
                ItemDicLayerDataStatic currentItem = listLayerDataDic[i];
                if (currentItem.fDCHD < 0 && currentItem.sJH == listLayerDataDic[i + 1].sJH)
                {
                    ItemDicLayerDataStatic nextItem = listLayerDataDic[i + 1];
                    currentItem.dbX      = nextItem.dbX;
                    currentItem.dbY      = nextItem.dbY;
                    currentItem.dbZ      = nextItem.dbZ + nextItem.fDCHD;
                    currentItem.fDS1_md  = nextItem.fDS1_md;
                    currentItem.fDS2_md  = nextItem.fDS2_md;
                    currentItem.fDS1_TVD = nextItem.fDS1_TVD;
                    currentItem.fDCHD    = 0;
                    currentItem.fSH      = 0;
                }
                listLayerDataDic[i] = currentItem;
            }

            //完善 小层 孔渗为无效值的情况
            for (int i = 0; i < listLayerDataDic.Count - 1; i++)
            {
                ItemDicLayerDataStatic currentItem = listLayerDataDic[i];
                if (currentItem.fDCHD < 0 && currentItem.sJH == listLayerDataDic[i + 1].sJH)
                {
                    ItemDicLayerDataStatic nextItem = listLayerDataDic[i + 1];
                    currentItem.dbX      = nextItem.dbX;
                    currentItem.dbY      = nextItem.dbY;
                    currentItem.dbZ      = nextItem.dbZ + nextItem.fDCHD;
                    currentItem.fDS1_md  = nextItem.fDS1_md;
                    currentItem.fDS2_md  = nextItem.fDS2_md;
                    currentItem.fDS1_TVD = nextItem.fDS1_TVD;
                    currentItem.fDCHD    = 0;
                    currentItem.fSH      = 0;
                }
                listLayerDataDic[i] = currentItem;
            }
            for (int i = listLayerDataDic.Count - 1; i > 0; i--)
            {
                ItemDicLayerDataStatic currentItem = listLayerDataDic[i];
                if (currentItem.fSH > 0 && (currentItem.fKXD <= 0 || currentItem.fSTL <= 0)) //有砂厚,砂厚大于0的必须有孔隙度和渗透率,用于产量劈分,储量计算
                {
                    //从 listLayerDataDic中选择,无值的取层段平均值
                    List <ItemDicLayerDataStatic> listCurrentLayer = listLayerDataDic.FindAll(p => p.sXCM == currentItem.sXCM).ToList();
                    if (listCurrentLayer.Count > 0)
                    {
                        if (currentItem.fKXD <= 0 && listCurrentLayer.FindAll(p => p.fKXD > 0).Count > 0)
                        {
                            currentItem.fKXD = listCurrentLayer.FindAll(p => p.fKXD > 0).Select(p => p.fKXD).Average();
                        }
                        if (currentItem.fSTL <= 0 && listCurrentLayer.FindAll(p => p.fSTL > 0).Count > 0)
                        {
                            currentItem.fSTL = listCurrentLayer.FindAll(p => p.fSTL > 0).Select(p => p.fSTL).Average();
                        }
                    }
                }
                listLayerDataDic[i] = currentItem;
            }

            write2File(cProjectManager.filePathLayerDataDic, listLayerDataDic);
            // Format and display the TimeSpan value.
        }
Exemplo n.º 12
0
        public static void updateWellConnect()
        {
            //读入生产和注入数据
            List <ItemInputWellProduct> productItem = cIOinputWellProduct.readProjectFile2Struct();
            List <ItemInputWellInject>  injectItem  = cIOInputWellInject.readProjectFile2Struct();

            //读入小层数据字典
            List <ItemDicLayerDataStatic> listLayerData = cIODicLayerDataStatic.readDicLayerData2struct();

            //读入射孔字典

            //获得年月
            string minYM = productItem.Select(p => p.sYM).Min();
            string maxYM = productItem.Select(p => p.sYM).Max();

            cProjectData.setProjectYM(minYM, maxYM);

            foreach (string sYM in cProjectData.ltStrProjectYM)
            {
                //按年月获得水井号,油井号
                List <ItemConnectInjPro> listItemConnect  = new List <ItemConnectInjPro>();
                List <string>            ltJHCurrentYMinj = injectItem.FindAll(p => p.sYM == sYM).Select(p => p.sJH).ToList();
                List <string>            ltJHCurrentYMpro = productItem.FindAll(p => p.sYM == sYM).Select(p => p.sJH).ToList();
                if (ltJHCurrentYMinj.Count > 0)
                {  // 分析在不同层注入井和生产井的连接关系
                    foreach (string _sxcm in cProjectData.ltStrProjectXCM)
                    {
                        List <GraphEdge> listCurrentGE = cIOVoronoi.readLayerGE(_sxcm);
                        foreach (string sJHinj in ltJHCurrentYMinj)
                        {
                            //找到sJHinj的相邻井
                            int        indexInjWell   = cProjectData.ltStrProjectJH.IndexOf(sJHinj);
                            List <int> ltIndexProWell = new List <int>();
                            foreach (GraphEdge ge in listCurrentGE)
                            {
                                if (ge.site1 == indexInjWell)
                                {
                                    ltIndexProWell.Add(ge.site2);
                                }
                                if (ge.site2 == indexInjWell)
                                {
                                    ltIndexProWell.Add(ge.site1);
                                }
                            }
                            foreach (string sJHpro in ltJHCurrentYMpro)
                            {
                                ItemConnectInjPro newItem = new ItemConnectInjPro();
                                newItem.sYM         = sYM;
                                newItem.sXCM        = _sxcm;
                                newItem.sJHinj      = sJHinj;
                                newItem.sJHpro      = sJHpro;
                                newItem.factorSplit = 0.0f;
                                int indexProWell = cProjectData.ltStrProjectJH.IndexOf(sJHpro);
                                // 是否临井,voronoi图中分析,找出共边的井号
                                if (ltIndexProWell.IndexOf(indexProWell) >= 0)
                                {
                                    // 是否地质同层,在小层数据表中查找
                                    ItemDicLayerDataStatic layerDataInj = listLayerData.Find(p => p.sJH == sJHinj && p.sXCM == _sxcm);
                                    ItemDicLayerDataStatic layerDataPro = listLayerData.Find(p => p.sJH == sJHpro && p.sXCM == _sxcm);
                                    if (layerDataInj.fSH > 0 && layerDataPro.fSH > 0)
                                    {
                                        newItem.factorSplit = 1.0f;
                                    }
                                    // 是否同层射开

                                    //连线是否过断层
                                }
                                if (newItem.factorSplit == 1.0f)
                                {
                                    listItemConnect.Add(newItem);                              //只写有值的
                                }
                            }
                        }
                    }
                }
                List <string> listLine = new List <string>();
                listLine.Add("年月 注入井号 生产井号 分配系数");
                foreach (ItemConnectInjPro item in listItemConnect)
                {
                    listLine.Add(ItemConnectInjPro.item2string(item));
                }
                string fileOut = Path.Combine(cProjectManager.dirPathUsedProjectData, sYM + cProjectManager.fileExtensionConnect);
                cIOBase.write2file(listLine, fileOut);
                //输入文件
            }
        }