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