private void MF2PRMS()
        {
            var sfr = _Modflow.Select(SFRPackage.PackageName);

            if (sfr != null)
            {
                var sfr_pck = sfr as SFRPackage;
                sfr_pck.RiverNetwork.PropertyChanged += RiverNetwork_PropertyChanged;
            }
        }
Exemple #2
0
        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);
            }
        }