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