Beispiel #1
0
 void inialCalPar()
 {
     for (int i = 0; i < this.dgvCalpar.RowCount - 1; i++)
     {
         itemReservePar cureentLayerPar = new itemReservePar();
         cureentLayerPar.sXCM = dgvCalpar.Rows[i].Cells[0].Value.ToString();
         float des = 0.8f;
         float.TryParse(dgvCalpar.Rows[i].Cells[1].Value.ToString(), out des);
         cureentLayerPar.destiny = des;
         float fBo = 1.1f;
         float.TryParse(dgvCalpar.Rows[i].Cells[1].Value.ToString(), out fBo);
         cureentLayerPar.fBo = fBo;
         layerReservaParCal.Add(cureentLayerPar);
     }
     foreach (string sxcm in cProjectData.ltStrProjectXCM)
     {
         //如果没有对应的计算参数给个默认值
         if (layerReservaParCal.Count == 0 || layerReservaParCal.Select(p => p.sXCM).ToList().IndexOf(sxcm) < 0)
         {
             itemReservePar currentCalResrvePar = new itemReservePar();
             currentCalResrvePar.sXCM    = sxcm;
             currentCalResrvePar.destiny = 0.8f;
             currentCalResrvePar.fBo     = 1.1f;
             layerReservaParCal.Add(currentCalResrvePar);
         }
     }
 }
Beispiel #2
0
        List <itemWellLayerReserve> calReserve()
        {
            List <itemWellLayerReserve> listLayerWellReserves = new List <itemWellLayerReserve>();
            // 读入小层数据字典
            List <ItemDicLayerDataStatic> listData = cIODicLayerDataStatic.readDicLayerData2struct();
            List <itemWellLayerVoi>       listVoi  = cIOVoronoi.read2Struct();

            //   按小层顺序筛选,并计算voronoi,通过voronic 求取每个井层的面积
            foreach (string xcm in cProjectData.ltStrProjectXCM)
            {
                List <ItemDicLayerDataStatic> listCurrentLayerData = listData.FindAll(p => p.sXCM == xcm);
                List <itemWellLayerVoi>       listCurrenrLayerVoi  = listVoi.FindAll(p => p.sXCM == xcm);
                itemReservePar currentCalResrvePar = layerReservaParCal.First(p => p.sXCM == xcm);
                //如果没填得检查一遍
                //内部会排序并有对应的ID
                //尽量让排序后的sizes和Voronoi内部的size是同一个顺序,这块需要校验=Y的情况
                //如果都是相等的,可以从0开始找

                //有了 listCurrentLayerData和读取ListVoi 对应的计算参数,加上对应的密度,体积系数就能按容积法求出面积,然后输出了
                for (int i = 0; i < listCurrentLayerData.Count; i++)
                {
                    itemWellLayerReserve currentWellReserver = new itemWellLayerReserve();
                    currentWellReserver.sJH                 = listCurrentLayerData[i].sJH;
                    currentWellReserver.sXCM                = listCurrentLayerData[i].sXCM;
                    currentWellReserver.dbX                 = listCurrentLayerData[i].dbX;
                    currentWellReserver.dbY                 = listCurrentLayerData[i].dbY;
                    currentWellReserver.fYXHD               = listCurrentLayerData[i].fYXHD;
                    currentWellReserver.fKXD                = listCurrentLayerData[i].fKXD;
                    currentWellReserver.fBHD                = listCurrentLayerData[i].fBHD;
                    currentWellReserver.destinyOil          = currentCalResrvePar.destiny;
                    currentWellReserver.fBo                 = currentCalResrvePar.fBo;
                    currentWellReserver.ltPD_Vertex_Voronoi = listCurrenrLayerVoi.Find(p => p.sJH == listCurrentLayerData[i].sJH).ltdpVertex;
                    //N=100×Ao×h×ф×Soi×ρo/fBoi
                    currentWellReserver.dbArea = cCalBase.calArea(currentWellReserver.ltPD_Vertex_Voronoi) / 1000000;
                    //面积计算还原坐标结构,存的是view坐标,需要还原成原坐标系坐标,注意面积单位问题
                    currentWellReserver.dbReserver = 0.01 * currentWellReserver.dbArea * currentWellReserver.fYXHD * currentWellReserver.fBHD
                                                     * currentWellReserver.destinyOil / currentWellReserver.fBo;
                    listLayerWellReserves.Add(currentWellReserver);
                    currentWellReserver.dbCLFD = 0.0;
                    if (currentWellReserver.dbArea > 0)
                    {
                        currentWellReserver.dbCLFD = currentWellReserver.dbReserver / currentWellReserver.dbArea;
                    }
                }
            } //end of layerXCM foreach
            return(listLayerWellReserves);
        }     //end of calRes