protected void Initialize(int[] dims, RedSea.Variable var) { _var = var; int numDims = dims.Length; _presentDims = new RedSea.Dimension[numDims]; for (int i = 0; i < numDims; ++i) { _presentDims[i] = (RedSea.Dimension)dims[i]; } _dimOffsets = new int[numDims]; _dimLengths = new int[numDims]; // Fill arrays. for (int dim = 0; dim < numDims; ++dim) { // Dimensions in correct order. _presentDims[dim] = (RedSea.Dimension)dims[dim]; // "Activate" all dimensions. _dimOffsets[dim] = -1; _dimLengths[dim] = -1; } }
public static string RedSeaFilenames(int step, int?substep, int?member, RedSea.Variable var) { string dir = locDataFolder + (step + 1); // Look for raw file. //if (substep != null || var == RedSea.Variable.VELOCITY_Z) //{ substep = substep ?? 0; dir = locDataFolderSubstep + (step + 1); // Not the W case: go into the inner folder. if (substep != null) { dir += locFolderName + member + '/'; } //string filename = RedSea.GetShortName(var) + ".0*" + (substep + 1) + ".data_scaled_end"; Console.WriteLine("Step {0}, Substep {1}", step, substep); int numZeros = 10 - (substep == 0 ? 1 : (int)(Math.Log10((int)substep * 9) + 1)); string filename = RedSea.GetShortName(var) + "." + new string('0', numZeros) + (substep * 9) + ".data"; Console.WriteLine(filename); string[] rawDirs = Directory.GetFiles(dir, filename, SearchOption.TopDirectoryOnly); Debug.Assert(rawDirs.Length == 1, "Exactly one matching file expected!"); return(rawDirs[0]); //} //else //{ // dir += locFileName; // return dir; //} }
/// <summary> /// Create a Loader object and open a NetCDF file. /// </summary> /// <param name="file">Path of the file.</param> //public LoaderRaw(string file) //{ // Debug.Assert(_numOpenFiles == 0, "Another file is still open!"); // _fileName = file; // // nDims = [3]; // // dimList = [ // // 500, 1, 500, // // 500, 1, 500, // // 50, 1, 50 // // ]; // // dataprec = ['float32']; // // nrecords = [1]; // // timeStepNumber = [108]; // //string metadata = System.IO.File.ReadAllText(@file+".meta"); // //int index = metadata.IndexOf("nDims = [ ") + ("nDims = [ ").Length; // //if (index != -1) // //{ // // int index2 = this.Message.IndexOf(",", index); // // if (index2 == -1) // // { // // index2 = this.Message.Length; // // } // //} // _dimIDs = new int[] { (int)RedSea.Variable.GRID_X, (int)RedSea.Variable.GRID_Y, (int)RedSea.Variable.GRID_Z }; // _dimLengths = new int[] { 500, 500, 50 }; //} //protected int _step; //protected int _substep; public LoaderRaw(RedSea.Variable var = RedSea.Variable.VELOCITY_X) { Debug.Assert(_numOpenFiles == 0, "Another file is still open!"); _dimIDs = (int[])_dimensionIDs.Clone(); // new int[] { (int)RedSea.Dimension.GRID_X, (int)RedSea.Dimension.GRID_Y, (int)RedSea.Dimension.GRID_Z, (int)RedSea.Dimension.MEMBER, (int)RedSea.Dimension.TIME, (int)RedSea.Dimension.SUBTIME }; _dimLengths = new int[] { 500, 500, 50, 50, RedSea.Singleton.NumSteps, RedSea.Singleton.NumSubsteps }; Range = new SliceRangeRaw(); Range.CorrectEndian = false; }
//public SliceRange(LoaderRaw loader) //{ // Initialize(loader.GetIDs, var); //} public SliceRange(SliceRange range) { _var = range._var; int numDims = range._presentDims.Length; _presentDims = new RedSea.Dimension[numDims]; _dimOffsets = new int[numDims]; _dimLengths = new int[numDims]; Array.Copy(range._presentDims, _presentDims, numDims); Array.Copy(range._dimOffsets, _dimOffsets, numDims); Array.Copy(range._dimLengths, _dimLengths, numDims); }
public SliceRange(LoaderNCF file, RedSea.Variable var) : base() { // Query number of dimensions of variable. int numDims; NetCDF.ResultCode ncState = NetCDF.nc_inq_varndims(file.GetID(), (int)var, out numDims); Debug.Assert(ncState == NetCDF.ResultCode.NC_NOERR); int[] dimIDs = new int[numDims]; // Query relevant dimensions. ncState = NetCDF.nc_inq_vardimid(file.GetID(), (int)var, dimIDs); Debug.Assert(ncState == NetCDF.ResultCode.NC_NOERR); Initialize(dimIDs, var); }
// string locWFileName = ".0000000108.data"; /// <summary> /// Loads the field using either /// </summary> /// <param name="step"></param> /// <param name="substep"></param> /// <param name="var"></param> /// <returns>Should the NetCDF loader be used?</returns> public static Loader RedSeaLoader(int step, int?substep, int?member, RedSea.Variable var) { string dir = RedSea.Singleton.GetFilename(step, substep, member, var); // Look for raw file. if (substep != null || var == RedSea.Variable.VELOCITY_Z) { var loader = new LoaderRaw(var); loader.Range.SetMember(RedSea.Dimension.TIME, step); loader.Range.SetMember(RedSea.Dimension.SUBTIME, substep ?? 0); loader.Range.SetMember(RedSea.Dimension.MEMBER, member ?? 0); return(loader); } else { return(new LoaderNCF(dir)); } }
public SliceRange(int[] dims, RedSea.Variable var) { Initialize(dims, var); }
public void SetVariable(RedSea.Variable value) { _var = value; }
public SliceRangeRaw(RedSea.Variable var = RedSea.Variable.VELOCITY_X) : base(_dimensionIDs, var) { CorrectEndian = false; SetMember(RedSea.Dimension.MEMBER, 0); SetMember(RedSea.Dimension.GRID_Z, 0); }
public ScalarField LoadFieldSlice(RedSea.Variable var) { Range.SetVariable(var); return(LoadFieldSlice(Range)); }