public override bool Load(int var_index, ICancelProgressHandler progress)
        {
            _ProgressHandler = progress;
            var full_file = Path.Combine(ModelService.WorkDirectory, _FileNames[var_index]);
            var grid      = Owner.Grid as MFGrid;

            _SelectedIndex = var_index;

            DataCube                = new DataCube <float>(Variables.Length, StepsToLoad, grid.ActiveCellCount, true);
            DataCube.Name           = "clm_input";
            DataCube.Variables      = this.Variables;
            DataCube.Topology       = (Owner.Grid as RegularGrid).Topology;
            DataCube.TimeBrowsable  = true;
            DataCube.AllowTableEdit = false;

            if (MasterPackage.ClimateInputFormat == FileFormat.Text)
            {
                MMSDataFile data = new MMSDataFile(full_file);
                data.NumTimeStep     = this.NumTimeStep;
                data.MaxTimeStep     = this.MaxTimeStep;
                data.DataCube        = this.DataCube;
                data.Loading        += stream_LoadingProgressChanged;
                data.DataCubeLoaded += data_DataCubeLoaded;
                data.LoadFailed     += data_LoadFailed;
                if (MasterPackage.UseGridClimate)
                {
                    data.Load(_GridHruMapping, var_index);
                }
                else
                {
                    data.LoadDataCube(var_index);
                }
            }
            else
            {
                DataCubeStreamReader stream = new DataCubeStreamReader(full_file);
                stream.NumTimeStep     = this.NumTimeStep;
                stream.MaxTimeStep     = this.MaxTimeStep;
                stream.DataCube        = this.DataCube;
                stream.Scale           = (float)this.ScaleFactor;
                stream.Loading        += stream_LoadingProgressChanged;
                stream.DataCubeLoaded += data_DataCubeLoaded;
                if (MasterPackage.UseGridClimate)
                {
                    stream.LoadDataCubeSingle(_GridHruMapping, var_index);
                }
                else
                {
                    stream.LoadDataCubeSingle(var_index);
                }
            }

            return(true);
        }
        public override bool Scan()
        {
            if (!FileName.Contains(".nhru"))
            {
                FileName += ".nhru";
            }
            DataCubeStreamReader stream = new DataCubeStreamReader(FileName);

            Variables     = stream.GetVariables();
            FeatureCount  = stream.FeatureCount;
            NumTimeStep   = TimeService.GetIOTimeLength(this.Owner.WorkDirectory);
            _StartLoading = TimeService.Start;
            MaxTimeStep   = NumTimeStep;
            return(true);
        }
        private void btn_open_dcx_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter = "data cube file|*.dcx";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                System.Windows.Forms.Cursor.Current = Cursors.WaitCursor;
                DataCubeStreamReader asx = new DataCubeStreamReader(dlg.FileName);
                asx.LoadDataCube();
                var mat = asx.DataCube;
                mat.Name = Path.GetFileNameWithoutExtension(dlg.FileName);
                Workspace.Add(mat);
                System.Windows.Forms.Cursor.Current = Cursors.Default;
            }
        }
        public override bool Load(int var_index, ICancelProgressHandler progress)
        {
            if (!FileName.Contains(".nhru"))
            {
                FileName += ".nhru";
            }
            _ProgressHandler = progress;
            NumTimeStep      = TimeService.GetIOTimeLength(this.Owner.WorkDirectory);
            string filename = this.FileName;

            if (UseSpecifiedFile)
            {
                filename = SpecifiedFileName;
            }
            int nstep = StepsToLoad;

            if (DataCube == null)
            {
                DataCube      = new DataCube <float>(Variables.Length, nstep, FeatureCount, true);
                DataCube.Name = "sw_out";
            }
            else
            {
                if (DataCube.Size[1] != nstep)
                {
                    DataCube = new DataCube <float>(Variables.Length, nstep, FeatureCount, true);
                }
            }
            DataCube.Variables = this.Variables;
            DataCube.Topology  = (Owner.Grid as RegularGrid).Topology;
            DataCube.DateTimes = this.TimeService.IOTimeline.Take(StepsToLoad).ToArray();
            DataCubeStreamReader stream = new DataCubeStreamReader(filename);

            stream.Scale           = (float)this.ScaleFactor;
            stream.DataCube        = this.DataCube;
            stream.MaxTimeStep     = this.StepsToLoad;
            stream.NumTimeStep     = this.NumTimeStep;
            stream.Loading        += stream_LoadingProgressChanged;
            stream.DataCubeLoaded += stream_DataCubeLoaded;
            stream.LoadFailed     += this.stream_LoadFailed;
            stream.LoadDataCube(var_index);
            return(true);
        }
        public override bool Load(ICancelProgressHandler progress)
        {
            _ProgressHandler = progress;
            string filename = this.FileName;

            if (UseSpecifiedFile)
            {
                filename = SpecifiedFileName;
            }
            NumTimeStep = TimeService.GetIOTimeLength(this.Owner.WorkDirectory);
            DataCubeStreamReader stream = new DataCubeStreamReader(filename);

            stream.Scale           = (float)this.ScaleFactor;
            stream.MaxTimeStep     = MaxTimeStep;
            stream.Loading        += stream_LoadingProgressChanged;
            stream.DataCubeLoaded += stream_DataCubeLoaded;
            stream.LoadFailed     += stream_LoadFailed;
            stream.LoadDataCube();
            return(true);
        }
        public override bool Execute(DotSpatial.Data.ICancelProgressHandler cancelProgressHandler)
        {
            DataCubeStreamReader ds = new DataCubeStreamReader(CloudCoverFileName);

            ds.LoadDataCube();
            var           cloudcover  = ds.DataCube;
            CSVFileStream locationcsv = new CSVFileStream(LocationFileName);
            var           locations   = locationcsv.Load <double>();
            StreamReader  sr_dates    = new StreamReader(DateTimeFileName);
            int           ndays       = cloudcover.Size[1];
            int           nlocation   = cloudcover.Size[2];
            var           dates       = new DateTime[ndays];
            int           progress    = 0;
            int           np          = 1;
            var           swmat       = new DataCube <float>(cloudcover.Size[0], cloudcover.Size[1], cloudcover.Size[2]);

            swmat.Name = OutputName;
            for (int i = 0; i < ndays; i++)
            {
                var line = sr_dates.ReadLine();
                dates[i] = DateTime.Parse(line);
            }
            sr_dates.Close();
            for (int i = 0; i < ndays; i++)
            {
                for (int j = 0; j < nlocation; j++)
                {
                    swmat[0, i, j] = (float)_ShortWaveRadiation.DailyIncomingRadiationIntensity(locations.GetValue(j, 1), locations.GetValue(j, 0), dates[i], cloudcover[0, i, j]);
                }
                progress = i * 100 / ndays;
                if (progress == 5 * np)
                {
                    cancelProgressHandler.Progress("Package_Tool", progress, "Processing step: " + progress + "%");
                    np++;
                }
            }
            Workspace.Add(swmat);
            return(true);
        }
        public override bool Execute(DotSpatial.Data.ICancelProgressHandler cancelProgressHandler)
        {
            DataCubeStreamReader ass = new DataCubeStreamReader(InputFileName);
            DataCubeStreamWriter dcw = new DataCubeStreamWriter(OutputFileName);

            ass.Open();
            dcw.WriteHeader(ass.Variables, ass.FeatureCount);

            if (InputTemperatureUnit == TemperatureUnit.Kelvin)
            {
                for (int t = 0; t < ass.NumTimeStep; t++)
                {
                    var mat = ass.LoadStep();
                    for (int i = 0; i < mat.Size[2]; i++)
                    {
                        mat[0, 0, i] = UnitConversion.Kelvin2Fahrenheit(mat[0, 0, i]);
                    }
                    dcw.WriteStep(1, ass.FeatureCount, mat);
                }
            }
            else if (InputTemperatureUnit == TemperatureUnit.Celsius)
            {
                for (int t = 0; t < ass.NumTimeStep; t++)
                {
                    var mat = ass.LoadStep();
                    for (int i = 0; i < mat.Size[2]; i++)
                    {
                        mat[0, 0, i] = UnitConversion.Celsius2Fahrenheit(mat[0, 0, i]);
                    }
                    dcw.WriteStep(1, ass.FeatureCount, mat);
                }
            }
            ass.Close();
            dcw.Close();
            return(true);
        }
Exemplo n.º 8
0
        public override bool Load(ICancelProgressHandler progresshandler)
        {
            _ProgressHandler = progresshandler;
            _NumTimeStep     = TimeService.GetIOTimeLength(ModelService.WorkDirectory);
            string filename = this.PackageInfo.FileName;

            if (UseSpecifiedFile)
            {
                filename = SpecifiedFileName;
            }

            if (File.Exists(filename))
            {
                var network = this._SFRPackage.RiverNetwork;
                RiverNetwork = network;
                int count = 1;
                if (network == null)
                {
                    return(false);
                }
                else
                {
                    ReachIndex.Clear();
                    int reachNum = network.ReachCount;
                    int nstep    = StepsToLoad;

                    if (PackageInfo.Format == FileFormat.Text)
                    {
                        OnLoading(0);
                        FileStream   fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                        StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);

                        string line   = "";
                        int    varLen = DefaultAttachedVariables.Length;
                        int    index  = 0;

                        int progress = 0;
                        if (!IsLoadCompleteData)
                        {
                            reachNum = network.RiverCount;
                        }

                        if (IsReadSSData)
                        {
                            SkippedSteps = SkippedSteps - 1;
                        }
                        for (int t = 0; t < SkippedSteps * network.ReachCount + SkippedSteps * 8; t++)
                        {
                            if (!sr.EndOfStream)
                            {
                                line = sr.ReadLine();
                            }
                        }

                        for (int i = 0; i < network.RiverCount; i++)
                        {
                            for (int j = 0; j < network.Rivers[i].Reaches.Count; j++)
                            {
                                ReachIndex.Add(Tuple.Create(i, j, index));
                                index++;
                            }
                        }
                        OnLoading(progress);
                        try
                        {
                            DataCube = new DataCube <float>(varLen, nstep, reachNum)
                            {
                                Name           = "SFR_Output",
                                AllowTableEdit = false,
                                TimeBrowsable  = true
                            };

                            DataCube.DateTimes = new DateTime[nstep];
                        }
                        catch (Exception)
                        {
                            Message = "Out of memory.";
                            return(false);
                        }
                        for (int t = 0; t < nstep; t++)
                        {
                            for (int c = 0; c < 8; c++)
                            {
                                sr.ReadLine();
                            }
                            int rch_index = 0;
                            for (int i = 0; i < network.RiverCount; i++)
                            {
                                if (IsLoadCompleteData)
                                {
                                    for (int j = 0; j < network.Rivers[i].Reaches.Count; j++)
                                    {
                                        line = sr.ReadLine();
                                        if (TypeConverterEx.IsNotNull(line))
                                        {
                                            var temp = TypeConverterEx.SkipSplit <float>(line, 5);
                                            for (int v = 0; v < varLen; v++)
                                            {
                                                DataCube.ILArrays[v].SetValue(temp[v], t, rch_index);
                                                //Values.Value[v][t][rch_index] = temp[v];
                                            }
                                        }
                                        else
                                        {
                                            //Debug.WriteLine(String.Format("step:{0} seg:{1} reach:{2}", t, i + 1, j + 1));
                                            goto finished;
                                        }
                                        rch_index++;
                                    }
                                }
                                else
                                {
                                    for (int j = 0; j < network.Rivers[i].Reaches.Count - 1; j++)
                                    {
                                        line = sr.ReadLine();
                                        if (TypeConverterEx.IsNull(line))
                                        {
                                            goto finished;
                                        }
                                    }
                                    line = sr.ReadLine();
                                    var temp = TypeConverterEx.SkipSplit <float>(line, 5);
                                    for (int v = 0; v < varLen; v++)
                                    {
                                        // Values.Value[v][t][i] = temp[v];
                                        DataCube.ILArrays[v].SetValue(temp[v], t, i);
                                    }
                                }
                            }
                            DataCube.DateTimes[t] = TimeService.Timeline[t];
                            progress = t * 100 / nstep;
                            if (progress > count)
                            {
                                OnLoading(progress);
                                count++;
                            }
                        }
finished:
                        {
                            OnLoading(100);
                        }
                        sr.Close();
                        fs.Close();
                        if (IsLoadCompleteData)
                        {
                            DataCube.Topology = _SFRPackage.ReachTopology;
                        }
                        else
                        {
                            DataCube.Topology = _SFRPackage.SegTopology;
                        }

                        DataCube.Variables     = DefaultAttachedVariables;
                        DataCube.TimeBrowsable = true;
                        Variables = DefaultAttachedVariables;
                        OnLoaded(progresshandler);
                        return(true);
                    }
                    else
                    {
                        if (UseSpecifiedFile)
                        {
                            FileName = SpecifiedFileName;
                        }
                        DataCubeStreamReader stream = new DataCubeStreamReader(FileName);
                        stream.Scale           = (float)this.ScaleFactor;
                        stream.MaxTimeStep     = this.MaxTimeStep;
                        stream.NumTimeStep     = this.NumTimeStep;
                        stream.Loading        += stream_LoadingProgressChanged;
                        stream.DataCubeLoaded += stream_Loaded;
                        stream.LoadDataCube();
                        return(true);
                    }
                }
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 9
0
        public override bool Execute(DotSpatial.Data.ICancelProgressHandler cancelProgressHandler)
        {
            //string basedir = @"E:\Heihe\HRB\DataSets\Driving Forces\PXD\";
            //AverageTemperatureFileName = basedir + "daily_tavk_11243.dcx";
            //MaxTemperatureFileName = basedir + "daily_tmaxk_11243.dcx";
            //MinTemperatureFileName = basedir + "daily_tmink_11243.dcx";
            //RelativeHumidityFileName = @"E:\Heihe\HRB\DataSets\Driving Forces\TY\rh.dcx";
            //AirPressureFileName = basedir + "daily_ap_11243.dcx";
            //WindSpeedFileName = basedir + "daily_windspeed_11243.dcx";

            IFeatureSet fs = FeatureSet.Open(PointFeatureFileName);

            string[] files = new string[] { AverageTemperatureFileName, MaxTemperatureFileName, MinTemperatureFileName, RelativeHumidityFileName,
                                            AirPressureFileName, WindSpeedFileName };
            var npt = fs.NumRows();

            Coordinate[] coors = new Coordinate[npt];
            for (int i = 0; i < npt; i++)
            {
                var geo_pt = fs.GetFeature(i).Geometry;
                coors[i] = geo_pt.Coordinate;
            }
            int nfile = files.Length;

            DataCubeStreamReader[] ass  = new DataCubeStreamReader[nfile];
            DataCube <float>[]     mats = new DataCube <float> [nfile];
            for (int i = 0; i < nfile; i++)
            {
                ass[i] = new DataCubeStreamReader(files[i]);
                ass[i].Open();
            }
            int progress         = 0;
            int nstep            = ass[0].NumTimeStep;
            int ncell            = ass[0].FeatureCount;
            PenmanMonteithET pet = new PenmanMonteithET();

            DataCubeStreamWriter sw = new DataCubeStreamWriter(OutputFileName);

            sw.WriteHeader(new string[] { "pet" }, ncell);
            DataCube <float> mat_out = new DataCube <float>(1, 1, ncell);

            mat_out.DateTimes = new DateTime[nstep];
            int count = 1;

            for (int t = 0; t < nstep; t++)
            {
                for (int i = 0; i < nfile; i++)
                {
                    mats[i] = ass[i].LoadStep();
                }
                for (int n = 0; n < ncell; n++)
                {
                    var tav  = mats[0][0, 0, n];
                    var tmax = mats[1][0, 0, n];
                    var tmin = mats[2][0, 0, n];
                    if (InputTemperatureUnit == TemperatureUnit.Fahrenheit)
                    {
                        tmax = (float)UnitConversion.Fahrenheit2Kelvin(tmax);
                        tmin = (float)UnitConversion.Fahrenheit2Kelvin(tmin);
                        tav  = (float)UnitConversion.Fahrenheit2Kelvin(tav);
                    }
                    else if (InputTemperatureUnit == TemperatureUnit.Celsius)
                    {
                        tmax = (float)UnitConversion.Celsius2Kelvin(tmax);
                        tmin = (float)UnitConversion.Celsius2Kelvin(tmin);
                        tav  = (float)UnitConversion.Celsius2Kelvin(tav);
                    }
                    double ap  = mats[4][0, 0, n] / 1000;
                    var    et0 = pet.ET0(coors[n].Y, coors[n].X, tav, tmax, tmin,
                                         mats[3][0, 0, n], ap, mats[5][0, 0, n], Start.AddDays(t), CloudCover);

                    if (OutputLengthUnit == LengthUnit.inch)
                    {
                        mat_out[0, 0, n] = (float)System.Math.Round(et0 * UnitConversion.mm2Inch, 3);
                    }
                    else
                    {
                        mat_out[0, 0, n] = (float)System.Math.Round(et0, 3);
                    }
                }
                mat_out.DateTimes[t] = Start.AddDays(1);
                sw.WriteStep(1, ncell, mat_out);
                progress = t * 100 / nstep;
                if (progress > count)
                {
                    cancelProgressHandler.Progress("Package_Tool", progress, "Processing step:" + (t + 1));
                    count++;
                }
            }

            sw.Close();
            for (int i = 0; i < nfile; i++)
            {
                ass[i].Close();
            }

            return(true);
        }
Exemplo n.º 10
0
        public bool Execute1(DotSpatial.Data.ICancelProgressHandler cancelProgressHandler)
        {
            //(double tavrg, double tmax, double tmin, double rh, double airP, double wind2, double Rnet, DateTime day)

            string[] files = new string[] { AverageTemperatureFileName, MaxTemperatureFileName, MinTemperatureFileName, RelativeHumidityFileName,
                                            AirPressureFileName, WindSpeedFileName, NetRadiationFileName };

            int nfile = files.Length;

            DataCubeStreamReader[] ass  = new DataCubeStreamReader[nfile];
            DataCube <float>[]     mats = new DataCube <float> [nfile];
            for (int i = 0; i < nfile; i++)
            {
                ass[i] = new DataCubeStreamReader(files[i]);
                ass[i].LoadDataCube();
                mats[i] = ass[i].DataCube;
            }
            int progress         = 0;
            int count            = 1;
            int nstep            = mats[0].DateTimes.Length;
            int ncell            = mats[0].Size[2];
            PenmanMonteithET pet = new PenmanMonteithET();

            var mat_out = new DataCube <float>(1, nstep, ncell);

            mat_out.Name      = "mat";
            mat_out.Variables = new string[] { "pet" };

            for (int t = 0; t < nstep; t++)
            {
                for (int i = 0; i < ncell; i++)
                {
                    var tav  = mats[0][0, t, i];
                    var tmax = mats[1][0, t, i];
                    var tmin = mats[2][0, t, i];
                    if (InputTemperatureUnit == TemperatureUnit.Fahrenheit)
                    {
                        tmax = (float)UnitConversion.Fahrenheit2Kelvin(tmax);
                        tmin = (float)UnitConversion.Fahrenheit2Kelvin(tmin);
                        tav  = (float)UnitConversion.Fahrenheit2Kelvin(tav);
                    }
                    var et0 = pet.ET0(0, 0, tav, tmax, tmin,
                                      mats[3][0, t, i], mats[4][0, t, i], mats[5][0, t, i], mats[6][0, t, i], mats[0].DateTimes[t]);
                    // var et1 = (float)pet.ET0(40, 100, tav, tmax, tmin,
                    //mats[3].Value[0][t][i], mats[4].Value[0][t][i], mats[5].Value[0][t][i], 7, mats[0].DateTimes[t], 0.1);
                    if (et0 <= 0)
                    {
                        et0 = 0.1;
                    }
                    if (OutputLengthUnit == LengthUnit.inch)
                    {
                        mat_out[0, t, i] = (float)System.Math.Round(et0 * UnitConversion.mm2Inch, 3);
                    }
                    else
                    {
                        mat_out[0, t, i] = (float)System.Math.Round(et0, 3);
                    }
                }

                progress = t * 100 / nstep;
                if (progress > count)
                {
                    cancelProgressHandler.Progress("Package_Tool", progress, "Processing step:" + (t + 1));
                    count++;
                }
            }
            mat_out.DateTimes = mats[0].DateTimes;
            Workspace.Add(mat_out);

            return(true);
        }