private void MF2PRMS() { var sfr = _Modflow.Select(SFRPackage.PackageName); if (sfr != null) { var sfr_pck = sfr as SFRPackage; sfr_pck.RiverNetwork.PropertyChanged += RiverNetwork_PropertyChanged; } }
public override bool Execute(ICancelProgressHandler cancelProgressHandler) { var shell = MyAppManager.Instance.CompositionContainer.GetExportedValue <IShellService>(); var prj = MyAppManager.Instance.CompositionContainer.GetExportedValue <IProjectService>(); var model = prj.Project.Model; int progress = 0; int count = 1; Modflow mf = null; if (model is HeiflowModel) { mf = (model as HeiflowModel).ModflowModel; } else if (model is Modflow) { mf = model as Modflow; } if (mf != null) { if (!mf.Packages.ContainsKey(FHBPackage.PackageName)) { var fhb = mf.Select(FHBPackage.PackageName); mf.Add(fhb); } var pck = mf.GetPackage(FHBPackage.PackageName) as FHBPackage; pck.NBDTIM = 2; pck.NHED = 0; pck.IFHBSS = 1; pck.BDTIM = new int[] { 0, prj.Project.Model.TimeService.NumTimeStep }; List <FlowBound> list = new List <FlowBound>(); int npt = _sourcefs.Features.Count; for (int i = 0; i < npt; i++) { var pt = _sourcefs.Features[i].Geometry.Coordinate; int layer = 1; float rate = 0; if (!string.IsNullOrEmpty(LayerField)) { int.TryParse(_sourcefs.DataTable.Rows[i][LayerField].ToString(), out layer); } if (!string.IsNullOrEmpty(FluxRateField)) { float.TryParse(_sourcefs.DataTable.Rows[i][FluxRateField].ToString(), out rate); } for (int j = 0; j < _grid_layer.Features.Count; j++) { var cell = _grid_layer.Features[j].Geometry.Coordinates; if (SpatialRelationship.PointInPolygon(cell, pt)) { FlowBound bound = new FlowBound() { Layer = layer, FlowRate = rate, Row = int.Parse(_grid_layer.DataTable.Rows[j]["ROW"].ToString()), Col = int.Parse(_grid_layer.DataTable.Rows[j]["COLUMN"].ToString()), }; list.Add(bound); break; } } progress = i * 100 / npt; if (progress > count) { cancelProgressHandler.Progress("Package_Tool", progress, "Processing point: " + i); count++; } } if (list.Count > 0) { pck.NFLW = list.Count; var FlowRate = new DataCube <float>(4 + pck.NBDTIM, 1, pck.NFLW) { Name = "FHB_FlowRate", TimeBrowsable = false, AllowTableEdit = true }; FlowRate.Variables[0] = "Layer";//Layer Row Column IAUX FLWRAT(NBDTIM) FlowRate.Variables[1] = "Row"; FlowRate.Variables[2] = "Column"; FlowRate.Variables[3] = "IAUX"; for (int i = 0; i < pck.NBDTIM; i++) { FlowRate.Variables[4 + i] = "FLWRAT " + (i + 1); } for (int i = 0; i < pck.NFLW; i++) { var bound = list[i]; FlowRate[0, 0, i] = bound.Layer; FlowRate[1, 0, i] = bound.Row; FlowRate[2, 0, i] = bound.Col; FlowRate[3, 0, i] = 0; for (int j = 0; j < pck.NBDTIM; j++) { FlowRate[4 + j, 0, i] = bound.FlowRate; } } FlowRate.TimeBrowsable = false; pck.FlowRate = FlowRate; pck.CreateFeature(shell.MapAppManager.Map.Projection, prj.Project.GeoSpatialDirectory); pck.BuildTopology(); pck.IsDirty = true; pck.Save(null); pck.ChangeState(Models.Generic.ModelObjectState.Ready); } else { pck.ChangeState(Models.Generic.ModelObjectState.Standby); cancelProgressHandler.Progress("Package_Tool", 100, "Warning: no points located in the modeling domain."); } return(true); } else { cancelProgressHandler.Progress("Package_Tool", 100, "Error message: Modflow is used by this tool."); return(false); } }