public void SaveRechargeWell(string filename, string shpfile) { var fs = DotSpatial.Data.FeatureSet.Open(shpfile); var dt = fs.DataTable; StreamWriter sw = new StreamWriter(filename); var rows = (from dr in dt.AsEnumerable() where dr.Field <int>("IUZFBND") == 0 select dr).ToArray(); int count = rows.Count(); string line = string.Format("{0}\t{1}\t# Data Set 5: ITMP NP Stress period {2}", count, 0, 1); sw.WriteLine(line); for (int i = 0; i < count; i++) { DataRow dr = rows[i]; var w = new MFWell(i, mfgrid); w.Layer = 1; w.Row = int.Parse(dr["Row"].ToString()); w.Column = int.Parse(dr["Column"].ToString()); var rch = float.Parse(dr["Recharge"].ToString()); w.PumpingRate = rch * 1000 * 1000 * 2; if (w.PumpingRate == 0) { w.PumpingRate = 100; } w.IFace = 0; line = string.Format("{0}\t{1}\t{2}\t{3}\t{4}", w.Layer, w.Row, w.Column, w.PumpingRate, w.IFace); sw.WriteLine(line); } sw.Close(); fs.Close(); }
public override void Read(string filename = "") { if (filename == "") { var mm = (from f in mfgrid.MFProject.MFFile.mMFModuleFile where f.ModuleName.ToUpper() == "WEL" select f).FirstOrDefault(); filename = mm.FullFileName; } if (File.Exists(filename)) { var grid = mfgrid; StreamReader sr = new StreamReader(filename); var line = ReadCommet(sr); var ss = TypeConverterEx.Split <int>(line, 2); Parameters["MXACTW"].IntValue = ss[0]; Parameters["IWELCB"].IntValue = ss[1]; Wells = new MFWell[grid.MFProject.NPeriod][]; SPInfo = new int[grid.MFProject.NPeriod, 2]; for (int n = 0; n < grid.MFProject.NPeriod; n++) { ss = TypeConverterEx.Split <int>(sr.ReadLine(), 2); SPInfo[n, 0] = ss[0]; SPInfo[n, 1] = ss[1]; if (ss[0] > 0) { Wells[n] = new MFWell[ss[0]]; for (int i = 0; i < ss[0]; i++) { var w = new MFWell(i, grid); var vv = TypeConverterEx.Split <float>(sr.ReadLine()); w.Layer = (int)vv[0]; w.Row = (int)vv[1]; w.Column = (int)vv[2]; w.PumpingRate = vv[3]; w.IFace = (int)vv[4]; w.Coordinate = grid.LocateNode(w.Column, w.Row); Wells[n][i] = w; } } } Parameters["WELL"].Value = Wells; sr.Close(); } }
/// <summary> /// load from shp file that has columns with names "Layer", "Row","Column" /// </summary> /// <param name="para"> first para is DataTable, sencond para is PumpRate field name, third para is layer count (if this para >1, then pumping rate is equally distributed in each layer) </param> public override void Load(object[] para) { if (para != null) { var dataTable = para[0] as DataTable; string [] prField = (string[])para[1]; int nlayer = (int)para[2]; Wells = new MFWell[mfgrid.MFProject.NPeriod][]; if (SPInfo == null) { SPInfo = new int[2, 2]; SPInfo[0, 0] = dataTable.Rows.Count * nlayer; SPInfo[1, 0] = -1; } for (int n = 0; n < mfgrid.MFProject.NPeriod; n++) { if (SPInfo[n, 0] > 0) { Wells[n] = new MFWell[dataTable.Rows.Count * nlayer]; for (int i = 0; i < dataTable.Rows.Count; i++) { for (int l = 0; l < nlayer; l++) { int index = i * nlayer + l; var w = new MFWell(index, mfgrid); var dr = dataTable.Rows[i]; w.Layer = int.Parse(dr["Layer"].ToString()) - l; w.Row = int.Parse(dr["Row"].ToString()); w.Column = int.Parse(dr["Col"].ToString()); w.PumpingRate = float.Parse(dr[prField[n]].ToString()) / nlayer; w.IFace = 0; w.Coordinate = mfgrid.LocateNode(w.Column, w.Row); Wells[n][index] = w; } } } } Parameters["WELL"].Value = Wells; Parameters["MXACTW"].IntValue = dataTable.Rows.Count * nlayer; } }