/// <summary> 获取指定井名的所有完井信息和最后一个时间点的井别 </summary>
        public Tuple <List <PERF>, SimONProductType> GetAllLoaction(List <WELLCTRL> wells, string wellName)
        {
            var locations = wells.FindAll(l => l.WellName0 == wellName);

            if (locations == null || locations.Count == 0)
            {
                return(null);
            }

            Tuple <List <PERF>, SimONProductType> perf = new Tuple <List <PERF>, SimONProductType>(new List <PERF>(), locations.Last().ProType);

            // Todo :获取最后一个存在完井信息的生产数据
            WELLCTRL lastWellContain = locations.FindLast(l => l.Find <PERF>() != null);

            if (lastWellContain != null)
            {
                perf.Item1.AddRange(lastWellContain.FindAll <PERF>());
            }

            //locations.ForEach(l => perf.Item1.AddRange(l.FindAll<PERF>()));

            return(perf);
        }
Пример #2
0
        /// <summary> 将Eclipse完井数据转换成SimON完井数据 </summary>
        void ConvertCompadat(WELLCTRL well, List <NAME> names, List <BaseKey> basekey, List <WPIMULT> wpimult, List <PERF> compTemps)
        {
            List <BaseKey> compdats = basekey.FindAll(l => l is COMPDAT).ToList();

            //List<WELOPEN> welopen

            if (string.IsNullOrEmpty(well.WellName0) && compdats != null && compdats.Count > 0)
            {
                COMPDAT c = compdats.FirstOrDefault() as COMPDAT;
                well.WellName0 = c.Items.FirstOrDefault().jm0;
            }

            NAME name = names.Find(l => l.WellName == well.WellName0);

            //  添加完井数据
            foreach (BaseKey c in basekey)
            {
                if (c is COMPDAT)
                {
                    COMPDAT com = c as COMPDAT;

                    foreach (COMPDAT.Item citem in com.Items)
                    {
                        if (citem.jm0 != well.WellName0)
                        {
                            continue;
                        }

                        #region - SCh数据 -

                        PERF perf = new PERF("PERF");
                        perf.WellName = well.WellName0;
                        perf.I0       = citem.i1;
                        perf.J1       = citem.j2;
                        perf.K12      = citem.swg3;
                        perf.K23      = citem.xwg4;
                        perf.Kgbs4    = citem.kgbz5;
                        perf.Jzs6     = citem.ljyz7;
                        perf.WjfxX7   = citem.skfx12 == "X" ? "DX" : "0";
                        perf.WjfxY8   = citem.skfx12 == "Y" ? "DY" : "0";
                        perf.WjfxZ9   = citem.skfx12 == "Z" ? "DZ" : "0";
                        perf.Bp10     = citem.bpxs10;

                        // Todo :查找井指数乘子
                        foreach (WPIMULT wp in wpimult)
                        {
                            var v = wp.Items.Find(l => l.jm0 == well.WellName0);

                            if (v != null)
                            {
                                perf.Jzscz5 = v.jzscz1;
                                break;
                            }
                        }


                        // Todo :增加前先删除存在的重复数据
                        well.DeleteAll <PERF>(l => l.I0 == perf.I0 && l.J1 == perf.J1 && l.K12 == perf.K12);

                        well.Add(perf);

                        #endregion

                        #region - WELL数据 -

                        NAME.Item nameItem = new NAME.Item();
                        nameItem.i0    = citem.i1;
                        nameItem.j1    = citem.j2;
                        nameItem.k12   = citem.swg3;
                        nameItem.k23   = citem.xwg4;
                        nameItem.kgbz4 = citem.kgbz5;
                        //nameItem.wi5 = "NA";// v.Value.skin.Value.Value.ToString();
                        //nameItem.dx6 = v.Value.wellIndex.Value.GetValue(v.Value.wellIndex.GetUnitValue(_ecl)).ToString();
                        //nameItem.dy7 = v.Value.wellDirection.Value.Value == "X" ? "0" : v.Value.wellDirection.Value.Value == "Y" ? "1" : "2";
                        nameItem.bpxs9 = citem.bpxs10;
                        nameItem.jj10  = (citem.jtnj8.ToDouble() / 2).ToString();
                        name.Items.Add(nameItem);
                        #endregion


                        // Todo :将当前时间点下 WELOPEN前增加到数据中
                        compTemps.Add(perf);
                    }
                }
                else if (c is WELOPEN)
                {
                    WELOPEN wp = c as WELOPEN;
                    if (wp.Items == null || wp.Items.Count == 0)
                    {
                        continue;
                    }
                    var vs = wp.Items.FindAll(l => l.jm0 == well.WellName0 || l.jm0 == KeyConfiger.EclipseDefalt);
                    if (vs == null || vs.Count == 0)
                    {
                        continue;
                    }
                    WELOPEN.Item v = vs.Last();
                    if (v == null)
                    {
                        continue;
                    }

                    // WELOPEN
                    //'G13' 'SHUT' 0 0 0 2 * /
                    // /

                    // Todo :查找之前所有完井
                    var coms = compTemps.FindAll(l => l.WellName == well.WellName0);

                    Predicate <PERF> match = l => true;

                    // Todo :0 或 *表示默认值全都取
                    if (v.i2 != KeyConfiger.EclipseDefalt && v.i2 != "0")
                    {
                        match += l => l.I0 == v.i2;
                    }

                    if (v.j3 != KeyConfiger.EclipseDefalt && v.j3 != "0")
                    {
                        match += l => l.J1 == v.j3;
                    }

                    if (v.k4 != KeyConfiger.EclipseDefalt && v.k4 != "0")
                    {
                        match += l => l.K12 == v.k4;
                    }

                    var findComs = coms.FindAll(match);

                    // Todo :增加WELOPEN控制的完井
                    foreach (var item in findComs)
                    {
                        PERF perf = item.Copy();
                        perf.Kgbs4 = v.jz1;
                        // Todo :增加前先删除存在的重复数据
                        well.DeleteAll <PERF>(l => l.I0 == item.I0 && l.J1 == item.J1 && l.K12 == item.K12);
                        well.Add(perf);
                    }
                }
            }
        }
Пример #3
0
        /// <summary> 转换成SimON格式的项 </summary>
        public WELLCTRL ConvertToSimON(OPT.Product.SimalorManager.Item item, DATES date, List <NAME> histNames)
        {
            WELLCTRL well = new WELLCTRL("WELLCTRL");

            if (item is WCONPROD.ItemHY)
            {
                WCONPROD.ItemHY nIt = item as WCONPROD.ItemHY;

                #region - 转换历史数据 -

                NAME name = histNames.Find(l => l.WellName == nIt.jm0);

                if (name == null)
                {
                    LogProviderHandler.Instance.OnRunLog("当前日期:" + date.DateTime + "井" + nIt.jm0 + "未找到对应的历史信息!");
                    return(null);
                }


                DAYS days = name.Find <DAYS>();

                if (days == null)
                {
                    days = new DAYS("DAYS");
                    name.Add(days);
                }
                DAYS.Item dayitem = new DAYS.Item();
                dayitem.Time0 = date.DateTime;
                dayitem.Csl1  = nIt.rcsl4;
                dayitem.Cql2  = nIt.rcql5;
                dayitem.Cyl3  = nIt.rcyl3;
                dayitem.Cyl7  = nIt.liqutPro6;
                days.Items.Add(dayitem);

                #endregion

                #region - 转换数模数据 -

                well.WellName0 = nIt.jm0;
                well.Jcyblxz2  = nIt.rcsl4;

                //  产水
                if (nIt.kzms2 == "WATER")
                {
                    well.Jcyblxz2 = nIt.rcsl4;
                    well.ProType  = SimONProductType.WRAT;
                }
                if (nIt.kzms2 == "GRAT")
                {
                    //  产气
                    well.Jcyblxz2 = nIt.rcql5;
                    well.ProType  = SimONProductType.GRAT;
                }
                if (nIt.kzms2 == "ORAT")
                {
                    //  产油
                    well.Jcyblxz2 = nIt.rcyl3;
                    well.ProType  = SimONProductType.ORAT;
                }

                if (nIt.kzms2 == "LRAT")
                {
                    //  产液
                    well.Jcyblxz2 = (nIt.rcyl3.ToDouble() + nIt.rcsl4.ToDouble()).ToString();
                    well.ProType  = SimONProductType.LRAT;
                }
                #endregion
            }
            else if (item is WCONHIST.Item)
            {
                WCONHIST.Item nIt = item as WCONHIST.Item;

                #region - 转换历史数据 -

                NAME name = histNames.Find(l => l.WellName == nIt.wellName0);

                if (name == null)
                {
                    LogProviderHandler.Instance.OnRunLog("当前日期:" + date.DateTime + "井" + nIt.wellName0 + "未找到对应的历史信息!");
                    return(well);
                }
                DAYS days = name.Find <DAYS>();

                if (days == null)
                {
                    days = new DAYS("DAYS");
                    name.Add(days);
                }
                DAYS.Item dayitem = new DAYS.Item();
                dayitem.Time0 = date.DateTime;
                dayitem.Csl1  = nIt.waterPro4;
                dayitem.Cql2  = nIt.gasPro5;
                dayitem.Cyl3  = nIt.oilPro3;
                dayitem.Cyl7  = (nIt.waterPro4.ToDouble() + nIt.oilPro3.ToDouble()).ToString();
                days.Items.Add(dayitem);

                #endregion

                #region - 转换数模数据 -

                well.WellName0 = nIt.wellName0;
                well.Jcyblxz2  = nIt.waterPro4;


                //  产水
                if (nIt.ctrlModel2 == "WATER")
                {
                    well.Jcyblxz2 = nIt.waterPro4;
                    well.ProType  = SimONProductType.WRAT;
                }
                if (nIt.ctrlModel2 == "GRAT")
                {
                    //  产气
                    well.Jcyblxz2 = nIt.gasPro5;
                    well.ProType  = SimONProductType.GRAT;
                }
                if (nIt.ctrlModel2 == "ORAT")
                {
                    //  产油
                    well.Jcyblxz2 = nIt.oilPro3;
                    well.ProType  = SimONProductType.ORAT;
                }

                if (nIt.ctrlModel2 == "LRAT")
                {
                    //  产液
                    well.Jcyblxz2 = (nIt.waterPro4.ToDouble() + nIt.oilPro3.ToDouble()).ToString();
                    well.ProType  = SimONProductType.LRAT;
                }
                #endregion
            }

            else if (item is WCONINJE.ItemHY)
            {
                WCONINJE.ItemHY nIt = item as WCONINJE.ItemHY;

                #region - 转换历史数据 -

                NAME name = histNames.Find(l => l.WellName == nIt.jm0);

                if (name == null)
                {
                    LogProviderHandler.Instance.OnRunLog("当前日期:" + date.DateTime + "井" + nIt.jm0 + "未找到对应的历史信息!");
                    return(well);
                }


                DAYS days = name.Find <DAYS>();

                if (days == null)
                {
                    days = new DAYS("DAYS");
                    name.Add(days);
                }
                DAYS.Item dayitem = new DAYS.Item();
                dayitem.Time0 = date.DateTime;

                if (nIt.zrltlx1 == "WATER")
                {
                    dayitem.Zsl4 = nIt.rzrl4;
                }
                else
                {
                    dayitem.Zql5 = nIt.rzrl4;
                }

                days.Items.Add(dayitem);

                #endregion

                #region - 转换数模数据 -

                well.WellName0 = nIt.jm0;


                if (nIt.zrltlx1 == "WATER")
                {
                    //well.Jcyblxz2 = nIt.rzrl4;
                    well.Jcyblxz2 = nIt.rzrl4;
                    well.ProType  = SimONProductType.WIR;
                }
                else
                {
                    //well.Jcyblxz2 = nIt.rzrl4;
                    //well.Jkkz1 = "6";

                    well.Jcyblxz2 = nIt.rzrl4;
                    well.ProType  = SimONProductType.GIR;
                }

                #endregion
            }
            else if (item is WCONINJH.Item)
            {
                WCONINJH.Item nIt = item as WCONINJH.Item;

                #region - 转换历史数据 -

                NAME name = histNames.Find(l => l.WellName == nIt.jm0);

                if (name == null)
                {
                    LogProviderHandler.Instance.OnRunLog("当前日期:" + date.DateTime + "井" + nIt.jm0 + "未找到对应的历史信息!");
                    return(well);
                }


                DAYS days = name.Find <DAYS>();

                if (days == null)
                {
                    days = new DAYS("DAYS");
                    name.Add(days);
                }
                DAYS.Item dayitem = new DAYS.Item();
                dayitem.Time0 = date.DateTime;

                if (nIt.zrltlx1 == "WATER")
                {
                    dayitem.Zsl4 = nIt.rzrl3;
                }
                else
                {
                    dayitem.Zql5 = nIt.rzrl3;
                }

                days.Items.Add(dayitem);

                #endregion

                #region - 转换数模数据 -

                well.WellName0 = nIt.jm0;

                if (nIt.zrltlx1 == "WATER")
                {
                    well.Jcyblxz2 = nIt.rzrl3;
                    //well.Jkkz1 = "7";
                    well.ProType = SimONProductType.WIBHP;
                }
                else
                {
                    well.Jcyblxz2 = nIt.rzrl3;
                    //well.Jkkz1 = "8";
                    well.ProType = SimONProductType.GIBHP;
                }

                #endregion
            }

            return(well);
        }
Пример #4
0
        /// <summary> 将Eclipse生产数据转换成SimON生产数据 </summary>
        public SCHEDULE ConvertToSimON(SCHEDULE sch, WELL location, DateTime startTime, BaseFile history)
        {
            // Todo :保存SCH

            SCHEDULE schedule = new SCHEDULE("SCHEDULE");

            List <string> wellNames = new List <string>();

            List <WELSPECS> ws = sch.FindAll <WELSPECS>();

            // Todo :查找所有井名
            ws.ForEach(l => wellNames.AddRange(l.Items.Select(k => k.jm0)));

            List <NAME> histNames = new List <NAME>();

            // Todo :初始化名称 生产_historyproduction.dat
            wellNames.ForEach(l => histNames.Add(new NAME("NAME")
            {
                WellName = l
            }));

            histNames.ForEach(l => history.Key.Add(l));


            // Todo :初始化完井WELL数据
            List <NAME> names = new List <NAME>();

            wellNames.ForEach(l => names.Add(new NAME("NAME")
            {
                WellName = l
            }));

            names.ForEach(l => location.Add(l));

            List <DATES> ds = sch.FindAll <DATES>();

            string format = "井名:{0} ({1},{2})";

            // Todo :添加起始信息到时间步
            DATES start = new DATES("DATES", startTime);

            sch.DeleteAll <DATES>();

            start.AddRange <BaseKey>(sch.Keys);

            ds.Insert(0, start);

            List <PERF> comAllTemp = new List <PERF>();

            foreach (DATES d in ds)
            {
                // Todo :对缓存中完井井名去重复取最后一条
                var distincts = comAllTemp.GroupBy(l => l.WellName + l.I0 + l.J1 + l.K12).ToList();
                comAllTemp.Clear();
                foreach (var item in distincts)
                {
                    comAllTemp.Add(item.Last());
                }

                //  创建SimON日期
                TIME time = new TIME("TIME");
                time.Date = d.DateTime;
                schedule.Add(time);

                var wconprod = d.FindAll <WCONPROD>();
                var wconhist = d.FindAll <WCONHIST>();
                var wconinje = d.FindAll <WCONINJE>();
                var wconinjh = d.FindAll <WCONINJH>();

                //  完井数据(考虑到排序)
                List <BaseKey> compdats = d.FindAll <BaseKey>(l => l is COMPDAT || l is WELOPEN);

                List <WPIMULT> wpimult = d.FindAll <WPIMULT>();

                List <WELOPEN> welopen = d.FindAll <WELOPEN>();

                #region - 添加没有生产信息的完井 -
                //  添加完井数据
                foreach (BaseKey c in compdats)
                {
                    if (c is COMPDAT)
                    {
                        COMPDAT com = c as COMPDAT;

                        foreach (COMPDAT.Item citem in com.Items)
                        {
                            // Todo :过滤有生产数据的,用后面方法处理
                            if (wconprod.Exists(l => l.Items.Exists(k => k.jm0 == citem.jm0)))
                            {
                                continue;
                            }
                            if (wconhist.Exists(l => l.Items.Exists(k => k.wellName0 == citem.jm0)))
                            {
                                continue;
                            }
                            if (wconinje.Exists(l => l.Items.Exists(k => k.jm0 == citem.jm0)))
                            {
                                continue;
                            }
                            if (wconinjh.Exists(l => l.Items.Exists(k => k.jm0 == citem.jm0)))
                            {
                                continue;
                            }

                            WELLCTRL well = time.Find <WELLCTRL>(l => l.WellName0 == citem.jm0);

                            if (well == null)
                            {
                                // Todo :创建一个空的生产信息
                                well           = new WELLCTRL("WELLCTRL");
                                well.ProType   = SimONProductType.NA;
                                well.WellName0 = citem.jm0;
                                time.Add(well);
                            }

                            NAME name = names.Find(l => l.WellName == well.WellName0);

                            #region - SCh数据 -

                            PERF perf = new PERF("PERF");
                            perf.WellName = well.WellName0;
                            perf.I0       = citem.i1;
                            perf.J1       = citem.j2;
                            perf.K12      = citem.swg3;
                            perf.K23      = citem.xwg4;
                            perf.Kgbs4    = citem.kgbz5;
                            perf.Jzs6     = citem.ljyz7;
                            perf.WjfxX7   = citem.skfx12 == "X" ? "DX" : "0";
                            perf.WjfxY8   = citem.skfx12 == "Y" ? "DY" : "0";
                            perf.WjfxZ9   = citem.skfx12 == "Z" ? "DZ" : "0";
                            perf.Bp10     = citem.bpxs10;

                            // Todo :查找井指数乘子
                            foreach (WPIMULT wp in wpimult)
                            {
                                var v = wp.Items.Find(l => l.jm0 == well.WellName0);

                                if (v != null)
                                {
                                    perf.Jzscz5 = v.jzscz1;
                                    break;
                                }
                            }

                            // Todo :增加前先删除存在的重复数据
                            well.DeleteAll <PERF>(l => l.I0 == perf.I0 && l.J1 == perf.J1 && l.K12 == perf.K12);
                            well.Add(perf);

                            #endregion

                            #region - WELL数据 -

                            NAME.Item nameItem = new NAME.Item();
                            nameItem.i0    = citem.i1;
                            nameItem.j1    = citem.j2;
                            nameItem.k12   = citem.swg3;
                            nameItem.k23   = citem.xwg4;
                            nameItem.kgbz4 = citem.kgbz5;
                            //nameItem.wi5 = "NA";// v.Value.skin.Value.Value.ToString();
                            //nameItem.dx6 = v.Value.wellIndex.Value.GetValue(v.Value.wellIndex.GetUnitValue(_ecl)).ToString();
                            //nameItem.dy7 = v.Value.wellDirection.Value.Value == "X" ? "0" : v.Value.wellDirection.Value.Value == "Y" ? "1" : "2";
                            nameItem.bpxs9 = citem.bpxs10;
                            nameItem.jj10  = (citem.jtnj8.ToDouble() / 2).ToString();
                            name.Items.Add(nameItem);
                            #endregion

                            comAllTemp.Add(perf);
                        }
                    }
                    else if (c is WELOPEN)
                    {
                        WELOPEN wp = c as WELOPEN;

                        foreach (var v in wp.Items)
                        {
                            // Todo :过滤有生产数据的,用后面方法处理
                            if (wconprod.Exists(l => l.Items.Exists(k => k.jm0 == v.jm0)))
                            {
                                continue;
                            }
                            if (wconhist.Exists(l => l.Items.Exists(k => k.wellName0 == v.jm0)))
                            {
                                continue;
                            }
                            if (wconinje.Exists(l => l.Items.Exists(k => k.jm0 == v.jm0)))
                            {
                                continue;
                            }
                            if (wconinjh.Exists(l => l.Items.Exists(k => k.jm0 == v.jm0)))
                            {
                                continue;
                            }
                            // WELOPEN
                            //'G13' 'SHUT' 0 0 0 2 * /
                            // /

                            // Todo :查找之前所有完井
                            var coms = comAllTemp.FindAll(l => l.WellName == v.jm0);

                            Predicate <PERF> match = l => true;

                            // Todo :0 或 *表示默认值全都取
                            if (v.i2 != KeyConfiger.EclipseDefalt && v.i2 != "0")
                            {
                                match += l => l.I0 == v.i2;
                            }

                            if (v.j3 != KeyConfiger.EclipseDefalt && v.j3 != "0")
                            {
                                match += l => l.J1 == v.j3;
                            }

                            if (v.k4 != KeyConfiger.EclipseDefalt && v.k4 != "0")
                            {
                                match += l => l.K12 == v.k4;
                            }

                            var findComs = coms.FindAll(match);

                            WELLCTRL well = time.Find <WELLCTRL>(l => l.WellName0 == v.jm0);
                            if (well == null)
                            {
                                // Todo :创建一个空的生产信息
                                well           = new WELLCTRL("WELLCTRL");
                                well.ProType   = SimONProductType.NA;
                                well.WellName0 = v.jm0;
                                time.Add(well);
                            }

                            // Todo :增加WELOPEN控制的完井
                            foreach (var fitem in findComs)
                            {
                                PERF perf = fitem.Copy();
                                perf.Kgbs4 = v.jz1;
                                // Todo :增加前先删除存在的重复数据
                                well.DeleteAll <PERF>(l => l.I0 == fitem.I0 && l.J1 == fitem.J1 && l.K12 == fitem.K12);
                                well.Add(perf);
                            }
                        }
                    }

                    //this.ConvertCompadat(well, names, compdats, wpimult, comAllTemp);
                }

                #endregion


                foreach (var item in wconprod)
                {
                    foreach (WCONPROD.ItemHY it in item.Items)
                    {
                        //  生产数据
                        WELLCTRL well = new WELLCTRL("WELLCTRL");

                        well.WellName0 = it.jm0;

                        well = this.ConvertToSimON(it, d, histNames);

                        if (well != null)
                        {
                            this.ConvertCompadat(well, names, compdats, wpimult, comAllTemp);

                            time.Add(well);
                        }
                    }
                }


                foreach (var item in wconhist)
                {
                    foreach (WCONHIST.Item it in item.Items)
                    {
                        //  生产数据
                        WELLCTRL well = new WELLCTRL("WELLCTRL");

                        well.WellName0 = it.wellName0;

                        well = this.ConvertToSimON(it, d, histNames);

                        this.ConvertCompadat(well, names, compdats, wpimult, comAllTemp);

                        time.Add(well);
                    }
                }


                foreach (var item in wconinje)
                {
                    foreach (WCONINJE.ItemHY it in item.Items)
                    {
                        //  生产数据
                        WELLCTRL well = new WELLCTRL("WELLCTRL");

                        well.WellName0 = it.jm0;

                        well = this.ConvertToSimON(it, d, histNames);

                        this.ConvertCompadat(well, names, compdats, wpimult, comAllTemp);

                        time.Add(well);
                    }
                }

                foreach (var item in wconinjh)
                {
                    foreach (WCONINJH.Item it in item.Items)
                    {
                        //  生产数据
                        WELLCTRL well = new WELLCTRL("WELLCTRL");

                        well.WellName0 = it.jm0;

                        well = this.ConvertToSimON(it, d, histNames);

                        this.ConvertCompadat(well, names, compdats, wpimult, comAllTemp);

                        time.Add(well);
                    }
                }

                //// Todo :将之前的完井信息都加入到缓存中
                //foreach (var item in compdats)
                //{
                //    comAllTemp.AddRange(item.Items);
                //}
            }

            return(schedule);
        }
        /// <summary> 转换成_historyproduction.dat </summary>
        public List <NAME> ConvertToHistoryProduction(List <string> wells, List <TIME> times)
        {
            List <NAME> names = new List <NAME>();

            //  初始化名称
            wells.ForEach(l => names.Add(new NAME("NAME")
            {
                WellName = l
            }));

            foreach (var n in names)
            {
                //  查找包含井名的时间步
                var findTimes = times.FindAll(l => l.Find <WELLCTRL>() != null && l.Find <WELLCTRL>().WellName0 == n.WellName);

                DAYS days = new DAYS("DAYS");
                n.Add(days);

                foreach (var item in findTimes)
                {
                    DAYS.Item it = new DAYS.Item();
                    it.Time0 = item.Date;
                    days.Items.Add(it);

                    WELLCTRL well = item.Find <WELLCTRL>();

                    switch (well.ProType)
                    {
                    case SimONProductType.BHP:
                        break;

                    case SimONProductType.WRAT:
                        it.Csl1 = well.Jcyblxz2;
                        break;

                    case SimONProductType.GRAT:
                        it.Cql2 = well.Jcyblxz2;
                        break;

                    case SimONProductType.ORAT:
                        it.Cyl3 = well.Jcyblxz2;
                        break;

                    case SimONProductType.LRAT:
                        it.Cyl7 = well.Jcyblxz2;
                        break;

                    case SimONProductType.WIR:
                        it.Zsl4 = well.Jcyblxz2;
                        break;

                    case SimONProductType.GIR:
                        it.Zql5 = well.Jcyblxz2;
                        break;

                    case SimONProductType.WIBHP:
                        it.Zsl4 = well.Jcyblxz2;
                        break;

                    case SimONProductType.GIBHP:
                        it.Zql5 = well.Jcyblxz2;
                        break;

                    case SimONProductType.SHUT:                           // 关井
                        break;

                    default:
                        break;
                    }
                }
            }

            return(names);
        }
        /// <summary> 用重启信息生成新重启数据(只包含主文件,初始化文件和生产文件) </summary>
        public SimONData ChangeRestartModel(string mainFilePath, RestartInfoModelSimON model)
        {
            //  不读取INCLUDE部分数据 只读取SCHEDLE中INCLUDE
            SimONData data = FileFactoryService.Instance.ThreadLoadFunc <SimONData>(() => new SimONData(mainFilePath, null, l => l.GetParentKey() is SCHEDULE));


            // HTodo  :传递输出参数  需要测试
            OUTSCHED rptsched = data.Key.Find <OUTSCHED>();

            RPTSUM rptsum = data.Key.Find <RPTSUM>();

            var incs = data.Key.FindAll <INCLUDE>();


            //  设置所有INCLUDE都不生成文件
            incs.ForEach(l => l.IsCreateFile = false);

            //  保存主文件
            SOLUTION sl = data.Key.Find <SOLUTION>();

            SCHEDULE sc = data.Key.Find <SCHEDULE>();

            WELLCTRL well = data.Key.Find <WELLCTRL>();

            //  更改起始时间
            SOLVECTRL tuning = data.Key.Find <SOLVECTRL>();

            // Todo :主文件没有在solotion中找
            if (tuning == null)
            {
                tuning = sl.Find <SOLVECTRL>();
            }

            tuning.Date = model.RestartTime;

            model.Solution.Add(tuning);

            //    替换数据
            sl.ExChangeData(model.Solution);
            sc.ExChangeData(model.Schedule);
            well.ExChangeData(model.Well);

            //

            //    设置保存部分数据
            List <INCLUDE> slIncludes = sl.FindAll <INCLUDE>();

            slIncludes.ForEach(l => l.IsCreateFile = true);

            List <INCLUDE> scIncludes = sc.FindAll <INCLUDE>();

            scIncludes.ForEach(l => l.IsCreateFile = true);

            List <INCLUDE> wellIncludes = well.FindAll <INCLUDE>();

            wellIncludes.ForEach(l => l.IsCreateFile = true);

            //  保存主文件(目前没用)
            //model.MainData = data;

            if (rptsched != null)
            {
                data.Key.Add(rptsched);
            }

            if (rptsum != null)
            {
                data.Key.Add(rptsum);
            }


            //// Todo :插入标识到第二个关键字
            //HeBianGu.Product.SimalorManager.RegisterKeys.SimON.STEPRST restart = new HeBianGu.Product.SimalorManager.RegisterKeys.SimON.STEPRST("STEPRST");
            //data.Key.InsertKey(1, restart);

            return(data);
        }
        /// <summary> 通关生产数据创建生产数据(目前只应用在FieldGoal案例重启)  </summary>
        public SCHEDULE InitRestartSchduleRestartCase(SCHEDULE sch, RestartInfoModelSimON model, string name, DateTime time, DateTime endtime, Dictionary <string, double> wellProducts, int datype)
        {
            //  创建关键字
            SCHEDULE schedule = new SCHEDULE("SCHEDULE");
            INCLUDE  include  = new INCLUDE("INCLUDE");

            include.FileName = name + "_SCH.DAT";
            include.FilePath = Path.GetDirectoryName(model.ResultFilePath) + "//" + include.FileName;
            model.SchPath    = include.FilePath;
            schedule.Add(include);

            include.Add(new USESTARTTIME("USESTARTTIME"));
            include.Add(new RECURRENT("WELLSCHED"));
            TIME start = new TIME("TIME", time);

            foreach (var item in wellProducts)
            {
                WELLCTRL well = new WELLCTRL("WELLCTRL");
                well.WellName0 = item.Key;
                well.ProType   = datype == 0 ? SimONProductType.GRAT : datype == 1? SimONProductType.ORAT: SimONProductType.LRAT;
                well.Jcyblxz2  = item.Value.ToString();
                start.Add(well);
            }

            TIME startAdd = new TIME("TIME", time.AddDays(1));

            TIME end = new TIME("TIME", endtime);

            end.Add(new RegisterKeys.SimON.STEPRST("STEPRST"));

            List <VFPINJ> Vins = sch.FindAll <VFPINJ>();

            List <VFPPROD> Vpns = sch.FindAll <VFPPROD>();

            if (Vins.Count > 0)
            {
                include.AddRange(Vins);
            }

            if (Vpns.Count > 0)
            {
                include.AddRange(Vpns);
            }

            include.Add(start);

            if (startAdd.Date < end.Date)
            {
                include.Add(startAdd);
            }

            if (end.Date.Date == start.Date.Date)
            {
                include.Add(startAdd);
            }
            else
            {
                include.Add(end);
            }



            // HTodo  :保存生产文件
            include.Save();

            return(schedule);


            // HTodo  :示例如下
            //USESTARTTIME
            //WELLSCHED
            //TIME    20140209D
            //       WELL   'PROD1'   4   9000   1500
            //       WELL   'INIJ1'   5   6000   NA

            //TIME    20140210D

            //TIME    20140309D
            //RESTART
        }