예제 #1
0
        public void ReadACTNUM(string filename)
        {
            FILENAME = filename;
            FileReader br = new FileReader();

            br.OpenBinaryFile(filename);

            if (br.Length > 0)
            {
                while (br.Position < br.Length - 24)
                {
                    br.ReadHeader();

                    if (br.header.keyword == "INTEHEAD")
                    {
                        int[] INTH = br.ReadIntList();
                        NX     = INTH[8];
                        NY     = INTH[9];
                        NZ     = INTH[10];
                        NACTIV = INTH[11];
                        IPHS   = INTH[14];
                        continue;
                    }

                    if (br.header.keyword == "PORV")
                    {
                        var PORV = br.ReadFloatList(br.header.count);

                        ACTNUM = new int[NX * NY * NZ];

                        // Для сжатого формата хранения данных
                        // требуется провести индексирования массива активных ячеек
                        // ACTNUM сам по себе это "1" для активной ячейки и "0" для не активной

                        int index = 1;
                        for (int iw = 0; iw < PORV.Length; ++iw)
                        {
                            if (PORV[iw] > 0)
                            {
                                ACTNUM[iw] = index++;
                            }
                        }

                        break;
                    }
                    br.SkipEclipseData();
                }
            }
            br.CloseBinaryFile();
        }
예제 #2
0
        public void ReadUNSMRY(string filename)
        {
            FileReader br = new FileReader();

            br.OpenBinaryFile(filename);
            if (br.Length > 0)
            {
                DATA = new List <float[]>();

                while (br.Position < br.Length - 24)
                {
                    br.ReadHeader();
                    if (br.header.keyword == "PARAMS" && br.header.count == NLIST)
                    {
                        DATA.Add(br.ReadFloatList(NLIST));
                        continue;
                    }
                    br.SkipEclipseData();
                }
            }
            br.CloseBinaryFile();
            NTIME  = DATA.Count;
            TINDEX = Array.IndexOf(KEYWORDS, "TIME");
        }
예제 #3
0
        public RSSPEC(string filename)
        {
            FileReader br = new FileReader();

            br.OpenBinaryFile(filename);

            if (br.Length > 0)
            {
                while (br.Position < br.Length - 24)
                {
                    br.ReadHeader();

                    if (br.header.keyword == "TIME")
                    {
                        br.ReadBytes(4);
                        TIME.Add(br.ReadDouble());
                        br.ReadBytes(4);
                        continue;
                    }

                    if (br.header.keyword == "ITIME")
                    {
                        int[] ITIME = br.ReadIntList();
                        REPORT.Add(ITIME[0]);
                        TYPE_RESTART.Add(ITIME[5]);
                        if (ITIME.Length > 10)
                        {
                            DATE.Add(new DateTime(ITIME[3], ITIME[2], ITIME[1], ITIME[10], ITIME[11], (int)(ITIME[12] * 1e6)));
                        }
                        else
                        {
                            DATE.Add(new DateTime(ITIME[3], ITIME[2], ITIME[1]));
                        }

                        continue;
                    }

                    if (br.header.keyword == "NAME")
                    {
                        NAME.Add(br.ReadStringList());
                        continue;
                    }

                    if (br.header.keyword == "TYPE")
                    {
                        TYPE.Add(br.ReadStringList());
                        continue;
                    }

                    if (br.header.keyword == "UNITS")
                    {
                        UNITS.Add(br.ReadStringList());
                        continue;
                    }

                    if (br.header.keyword == "NUMBER")
                    {
                        NUMBER.Add(br.ReadIntList());
                        continue;
                    }

                    if (br.header.keyword == "ARRAYMAX")
                    {
                        ARRAYMAX.Add(br.ReadFloatList(br.header.count));
                        continue;
                    }

                    if (br.header.keyword == "ARRAYMIN")
                    {
                        ARRAYMIN.Add(br.ReadFloatList(br.header.count));
                        continue;
                    }

                    if (br.header.keyword == "POINTER")
                    {
                        POINTER.Add(br.ReadIntList());
                        continue;
                    }

                    if (br.header.keyword == "POINTERB")
                    {
                        POINTERB.Add(br.ReadIntList());
                        continue;
                    }

                    br.SkipEclipseData();
                }
                br.CloseBinaryFile();
            }
        }
예제 #4
0
        public int NTIME;                  // Количество временных шагов

        public SMSPEC(string filename)
        {
            FileReader br = new FileReader();

            br.OpenBinaryFile(filename);

            while (br.Position < br.Length - 24)
            {
                br.ReadHeader();

                if (br.header.keyword == "RESTART")
                {
                    var           tmp = br.ReadStringList();
                    StringBuilder str = new StringBuilder();
                    foreach (string item in tmp)
                    {
                        str.Append(item);
                    }

                    RESTART = str.ToString();
                    continue;
                }

                if (br.header.keyword == "MEASRMNT")
                {
                    var tmp    = br.ReadStringList();
                    int lenght = br.header.count / NLIST;
                    MEASRMNT = new string[NLIST];
                    StringBuilder str = new StringBuilder();
                    for (int iw = 0; iw < NLIST; ++iw)
                    {
                        str.Clear();
                        for (int ik = 0; ik < lenght; ++ik)
                        {
                            str.Append(tmp[iw * lenght + ik]);
                        }
                        MEASRMNT[iw] = str.ToString();
                    }
                    continue;
                }

                if (br.header.keyword == "DIMENS")
                {
                    br.ReadBytes(4);
                    NLIST = br.ReadInt32();
                    NDIVX = br.ReadInt32();
                    NDIVY = br.ReadInt32();
                    NDIVZ = br.ReadInt32();
                    br.ReadBytes(4);
                    ISTAR = br.ReadInt32();
                    br.ReadBytes(4);
                    continue;
                }
                if (br.header.keyword == "KEYWORDS")
                {
                    KEYWORDS = br.ReadStringList();
                    continue;
                }

                if (br.header.keyword == "WGNAMES")
                {
                    WGNAMES = br.ReadStringList();
                    continue;
                }

                if (br.header.keyword == "NUMS")
                {
                    NUMS = br.ReadIntList();
                    continue;
                }

                if (br.header.keyword == "UNITS")
                {
                    WGUNITS = br.ReadStringList();
                    continue;
                }

                if (br.header.keyword == "STARTDAT")
                {
                    br.ReadBytes(4);
                    int SDAY   = br.ReadInt32();
                    int SMONTH = br.ReadInt32();
                    int SYEAR  = br.ReadInt32();
                    STARTDATE = new DateTime(SYEAR, SMONTH, SDAY);

                    if (br.header.count == 6)
                    {
                        int SHOUR   = br.ReadInt32();
                        int SMINUTE = br.ReadInt32();
                        int SSECOND = (int)(br.ReadInt32() * 1e6);
                        STARTDATE = new DateTime(SYEAR, SMONTH, SDAY, SHOUR, SMINUTE, SSECOND);
                    }

                    br.ReadBytes(4);
                    continue;
                }
                br.SkipEclipseData();
            }
            br.CloseBinaryFile();
        }
예제 #5
0
        public INSPEC(string filename)
        {
            FileReader br = new FileReader();

            br.OpenBinaryFile(filename);

            if (br.Length > 0)
            {
                while (br.Position < br.Length - 24)
                {
                    br.ReadHeader();

                    if (br.header.keyword == "NAME")
                    {
                        NAME.Add(br.ReadStringList());
                        continue;
                    }

                    if (br.header.keyword == "TYPE")
                    {
                        TYPE.Add(br.ReadStringList());
                        continue;
                    }

                    if (br.header.keyword == "UNITS")
                    {
                        UNITS.Add(br.ReadStringList());
                        continue;
                    }

                    if (br.header.keyword == "NUMBER")
                    {
                        NUMBER.Add(br.ReadIntList());
                        continue;
                    }

                    if (br.header.keyword == "ARRAYMAX")
                    {
                        ARRAYMAX.Add(br.ReadFloatList(br.header.count));
                        continue;
                    }

                    if (br.header.keyword == "ARRAYMIN")
                    {
                        ARRAYMIN.Add(br.ReadFloatList(br.header.count));
                        continue;
                    }

                    if (br.header.keyword == "POINTER")
                    {
                        POINTER.Add(br.ReadIntList());
                        continue;
                    }

                    if (br.header.keyword == "POINTERB")
                    {
                        POINTERB.Add(br.ReadIntList());
                        continue;
                    }

                    br.SkipEclipseData();
                }
                br.CloseBinaryFile();
            }
        }
예제 #6
0
        public int NACTIV; // Количество активных ячеек

        public EGRID(string filename)
        {
            FileReader br = new FileReader();

            br.OpenBinaryFile(filename);

            System.Diagnostics.Debug.WriteLine("EGRID");

            while (br.Position < br.Length - 24)
            {
                br.ReadHeader();
                if (br.header.keyword == "FILEHEAD")
                {
                    FILEHEAD   = br.ReadIntList();
                    GRIDTYPE   = FILEHEAD[4];
                    DUALPORO   = FILEHEAD[5];
                    FORMATDATA = FILEHEAD[6];
                    continue;
                }

                if (br.header.keyword == "MAPUNITS")
                {
                    br.ReadBytes(4);
                    MAPUNITS = br.ReadString(8);
                    br.ReadBytes(4);
                    continue;
                }

                if (br.header.keyword == "MAPAXES")
                {
                    br.ReadBytes(4);
                    XENDYAXIS = br.ReadFloat();
                    YENDYAXIS = br.ReadFloat();
                    XORIGIN   = br.ReadFloat();
                    YORIGIN   = br.ReadFloat();
                    XENDXAXIS = br.ReadFloat();
                    YENDXAXIS = br.ReadFloat();
                    br.ReadBytes(4);
                    continue;
                }

                if (br.header.keyword == "GRIDHEAD")
                {
                    GRIDHEAD = br.ReadIntList();
                    NX       = GRIDHEAD[1];
                    NY       = GRIDHEAD[2];
                    NZ       = GRIDHEAD[3];
                    continue;
                }

                if (br.header.keyword == "COORD")
                {
                    COORD = br.ReadFloatList(6 * (NY + 1) * (NX + 1));
                    continue;
                }

                if (br.header.keyword == "ZCORN")
                {
                    ZCORN = br.ReadBigList((ulong)(8 * NX * NY * NZ));
                    continue;
                }

                if (br.header.keyword == "ACTNUM")
                {
                    ACTNUM = br.ReadIntList();

                    // Для сжатого формата хранения данных
                    // требуется провести индексирования массива активных ячеек
                    // ACTNUM сам по себе это "1" для активной ячейки и "0" для не активной

                    int index = 1;
                    for (int iw = 0; iw < ACTNUM.Length; ++iw)
                    {
                        if (ACTNUM[iw] > 0)
                        {
                            ACTNUM[iw] = index++;
                        }
                    }

                    NACTIV = index - 1;

                    // Теперь ACTNUM хранит ещё и индекс ячейки INDEX, который есть просто линейный порядковый номер
                    // увеличенный на "1", так как надо сохранить нулевые значения в неактивных ячейках
                    continue;
                }

                System.Diagnostics.Debug.WriteLine(br.header.keyword);
                br.SkipEclipseData();
            }
            br.CloseBinaryFile();
        }