Exemple #1
0
        public void ReadArrayCube(string filename, int maxstep)
        {
            FileStream     fs   = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader   br   = new BinaryReader(fs);
            List <float[]> list = new List <float[]>();
            MFGrid         grid = mfgrid;

            int step = 0;

            while (fs.Position < fs.Length)
            {
                float[] data = new float[grid.ActiveCellCount];
                for (int l = 0; l < grid.ActiveCellCount; l++)
                {
                    data[l] = br.ReadSingle();
                }
                step++;
                if (step >= maxstep)
                {
                    break;
                }
                list.Add(data);
            }
            grid.ArrayCube = new MatrixCube <float>(list.Count, true);
            for (int i = 0; i < list.Count; i++)
            {
                grid.ArrayCube.LayeredSerialValue[i] = list[i];
            }

            br.Close();
            fs.Close();
        }
Exemple #2
0
        private float[] ReadNonZeroArray(BinaryReader br, MFGrid grid, float[][] values)
        {
            float[] wt = new float[grid.ActiveCellCount];
            float   vv = 0;

            for (int l = 0; l < grid.ActualLayerCount; l++)
            {
                int index = 0;
                for (int r = 0; r < grid.RowCount; r++)
                {
                    for (int c = 0; c < grid.ColumnCount; c++)
                    {
                        vv = br.ReadSingle();
                        if (grid.IBound.LayeredValues[0][r, c] != 0)
                        {
                            values[l][index] = vv;
                            index++;
                        }
                    }
                }
            }

            for (int i = 0; i < grid.ActiveCellCount; i++)
            {
                for (int ll = 0; ll < grid.ActualLayerCount; ll++)
                {
                    if (values[ll][i] != 0)
                    {
                        wt[i] = values[ll][i];
                        break;
                    }
                }
            }
            return(wt);
        }
Exemple #3
0
 public void Initialize(IProject project)
 {
     if (project != null)
     {
         mGrid    = project.Model.Grid as MFGrid;
         _Prms    = (project.Model as HeiflowModel).PRMSModel;
         _Modflow = (project.Model as HeiflowModel).ModflowModel;
     }
 }
Exemple #4
0
 public MFPackage(string name, MFGrid grid) : base(name)
 {
     if (grid != null)
     {
         mfgrid = grid;
         mfprj  = mfgrid.MFProject;
         if (!mfprj.Packages.Keys.Contains(name))
         {
             mfprj.Packages.Add(name, this);
         }
     }
     DefaultCBCVariables = new string[] { "FLOW RIGHT FACE", "FLOW FRONT FACE", "FLOW LOWER FACE", "STREAM LEAKAGE", "UZF RECHARGE", "SURFACE LEAKAGE", "GW ET" };
 }
        public HFBPackage(string name, MFGrid grid) : base(name, grid)
        {
            MFParameter para = MFParameter.Create("NPHFB", this, 1, 0, ParameterType.Parameter);

            para.IntValue = 0;
            AddParameter(para);

            para          = MFParameter.Create("MXFB", this, 1, 0, ParameterType.Parameter);
            para.IntValue = 0;
            AddParameter(para);

            para          = MFParameter.Create("NHFBNP", this, 1, 0, ParameterType.Parameter);
            para.IntValue = 0;
            AddParameter(para);

            para          = MFParameter.Create("NACTHFB", this, 1, 0, ParameterType.Parameter);
            para.IntValue = 0;
            AddParameter(para);
        }
        public WellPackage(string name, MFGrid grid)
            : base(name, grid)
        {
            IWELCB = 0;
            Option = "AUXILIARY IFACE NOPRINT";
            MFParameter para = new MFParameter("MXACTW");

            para.Package      = this;
            para.ValueType    = 1;
            para.VariableType = ParameterType.Parameter;
            para.Dimension    = 0;
            para.IntValue     = 0;
            para.SPVariable   = false;
            AddParameter(para);

            para              = new MFParameter("IWELCB");
            para.Package      = this;
            para.ValueType    = 1;
            para.VariableType = ParameterType.Parameter;
            para.Dimension    = 0;
            para.IntValue     = 0;
            para.SPVariable   = false;
            AddParameter(para);

            para              = new MFParameter("OPTION");
            para.Package      = this;
            para.ValueType    = 4;
            para.VariableType = ParameterType.Parameter;
            para.Dimension    = 0;
            para.StringValue  = "AUXILIARY IFACE NOPRINT";
            para.SPVariable   = false;
            AddParameter(para);

            para              = new MFParameter("WELL");
            para.Package      = this;
            para.ValueType    = 5;
            para.VariableType = ParameterType.Parameter;
            para.Dimension    = 2;
            para.SPVariable   = true;
            AddParameter(para);
        }
Exemple #7
0
        public IGrid Provide(string filename)
        {
            AscReader asc    = new AscReader();
            var       mat    = asc.Load(filename);
            var       mfgrid = new MFGrid();

            mfgrid.RowCount    = mat.Size[1];
            mfgrid.ColumnCount = mat.Size[2];
            //mfgrid.RowInteval = new MyScalar<float>(asc.CellSize);
            //mfgrid.ColInteval = new MyScalar<float>(asc.CellSize);

            mfgrid.IBound = new DataCube <float>(1, mfgrid.RowCount, mfgrid.ColumnCount);

            mfgrid.ActiveCellCount = 0;

            for (int r = 0; r < mat.Size[0]; r++)
            {
                for (int c = 0; c < mat.Size[1]; c++)
                {
                    if (mat[0, r, c] == asc.NoDataValue)
                    {
                        mfgrid.IBound[0, r, c] = 0;
                    }
                    else
                    {
                        mfgrid.IBound[0, r, c] = 1;
                        mfgrid.ActiveCellCount++;
                    }
                }
            }
            mfgrid.Elevations = new DataCube <float>(1, 1, mfgrid.ActiveCellCount);

            var vector = asc.LoadSerial(filename, mfgrid);

            mfgrid.Elevations[0]["0", ":"] = vector;

            return(mfgrid);
        }
Exemple #8
0
        public static void WriteSerialArray <T>(StreamWriter sw, MatrixCube <T> matrix, T multiplier, MFGrid grid, int clayer, int iprn, string comment)
        {
            if (matrix.IsConstant[clayer])
            {
                string line = string.Format("CONSTANT\t{0}\t{1}", matrix.LayeredConstantValues[clayer], comment);
                sw.WriteLine(line);
            }
            else
            {
                string line = string.Format("INTERNAL\t{0}\t(FREE)\t{1}\t{2}", multiplier, iprn, comment);
                int    row  = grid.RowCount;
                int    col  = grid.ColumnCount;

                sw.WriteLine(line);
                int index = 0;

                for (int r = 0; r < row; r++)
                {
                    line = "";
                    for (int c = 0; c < col; c++)
                    {
                        if (grid.IBound.LayeredValues[0][r, c] != 0)
                        {
                            line += matrix.LayeredSerialValue[clayer][index] + StreamReaderSequence.stab;
                            index++;
                        }
                        else
                        {
                            line += "0" + StreamReaderSequence.stab;
                        }
                    }
                    line = line.Trim(StreamReaderSequence.ctab);
                    sw.WriteLine(line);
                }
            }
        }
Exemple #9
0
        public static void ReadSerialArray <T>(StreamReader sr, MatrixCube <T> matrix, MFGrid grid, int cLayer)
        {
            string line = sr.ReadLine().ToUpper();
            var    strs = TypeConverterEx.Split <string>(line);

            // Read constant matrix
            if (strs[0].ToUpper() == "CONSTANT")
            {
                var ar   = TypeConverterEx.Split <string>(line);
                T   conv = TypeConverterEx.ChangeType <T>(ar[1]);
                matrix.LayeredConstantValues[cLayer] = conv;
                matrix.IsConstant[cLayer]            = true;
            }
            // Read internal matrix
            else
            {
                matrix.LayeredSerialValue[cLayer] = new T[grid.ActiveCellCount];
                matrix.IsConstant[cLayer]         = false;
                T multiplier = TypeConverterEx.ChangeType <T>(strs[1]);
                line = sr.ReadLine();
                var values = TypeConverterEx.Split <T>(line);
                int col    = grid.ColumnCount;
                int row    = grid.RowCount;

                if (values.Length == col)
                {
                    int index = 0;
                    for (int c = 0; c < col; c++)
                    {
                        if (grid.IBound.LayeredValues[0][0, c] != 0)
                        {
                            matrix.LayeredSerialValue[cLayer][index] = values[c];
                            index++;
                        }
                    }
                    for (int r = 1; r < row; r++)
                    {
                        line   = sr.ReadLine();
                        values = TypeConverterEx.Split <T>(line);
                        for (int c = 0; c < col; c++)
                        {
                            if (grid.IBound.LayeredValues[0][r, c] != 0)
                            {
                                matrix.LayeredSerialValue[cLayer][index] = values[c];
                                index++;
                            }
                        }
                    }
                }
                else
                {
                    int index   = 0;
                    int colLine = (int)Math.Ceiling(col / 10.0);
                    for (int r = 0; r < row; r++)
                    {
                        int i = 0;
                        if (r == 0)
                        {
                            i = 1;
                        }
                        else
                        {
                            i    = 0;
                            line = "";
                        }
                        for (; i < colLine; i++)
                        {
                            line += sr.ReadLine() + " ";
                        }

                        values = TypeConverterEx.Split <T>(line);
                        for (int c = 0; c < col; c++)
                        {
                            if (grid.IBound.LayeredValues[0][r, c] != 0)
                            {
                                matrix.LayeredSerialValue[cLayer][index] = values[c];
                                index++;
                            }
                        }
                    }
                }
            }
        }
 public UPWPackage(string name, MFGrid grid)
     : base(name, grid)
 {
 }