/// <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); }
/// <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); } } } }
/// <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); }
/// <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 }