Skip to content

Commit 5ab8ddb

Browse files
authored
Merge pull request #2 from sandialabs/alegra-ng
Some mods to read files emitted by alegra-ng
2 parents 374e7a0 + 8b66d19 commit 5ab8ddb

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

exodusii/file.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ def fh(self):
100100
def _filename(self, file):
101101
return nc.filename(file)
102102

103+
def get_filename(self, file):
104+
return nc.filename(file)
105+
103106
def _open(self, filename, mode):
104107
return nc.open(filename, mode=mode)
105108

exodusii/parallel_file.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import numpy as np
23
from argparse import Namespace
34

@@ -18,9 +19,16 @@ def __init__(self, *files):
1819

1920
maxlen = lambda list_like: max(list_like, key=len)
2021
self._title = maxlen([stringify(_.title) for _ in self.files])
21-
self._qa_records = maxlen(
22-
[self.get_variable(_, ex.VAR_QA_TITLE) for _ in self.files]
23-
)
22+
qa_records = self.get_variable(self.files[0], ex.VAR_QA_TITLE)
23+
for file in self.files:
24+
qa_records_this_file = self.get_variable(file, ex.VAR_QA_TITLE)
25+
if qa_records_this_file is None:
26+
continue
27+
elif qa_records is None:
28+
qa_records = qa_records_this_file
29+
else:
30+
qa_records = max([qa_records, qa_records_this_file], key=len)
31+
self._qa_records = qa_records
2432

2533
self.exinit = ex_init_params(self.files[0])
2634
self.cache = {}
@@ -30,13 +38,13 @@ def __contains__(self, name):
3038

3139
@property
3240
def filename(self):
33-
return ",".join(self._filename(f) for f in self.files)
41+
return ",".join(self.get_filename(f) for f in self.files)
3442

3543
def open(self, *files):
36-
files = [self._open(file, "r") for file in sorted(files)]
37-
self.check_consistency(files)
44+
self.files = [self._open(file, "r") for file in sorted(files)]
45+
self.check_consistency(self.files)
3846

39-
return files
47+
return self.files
4048

4149
def close(self):
4250
pass
@@ -430,7 +438,16 @@ def f_get_element_id_map(self, file):
430438
elem_id_map : ndarray of int
431439
432440
"""
433-
return self.get_variable(file, ex.VAR_ELEM_NUM_MAP)
441+
map = self.get_variable(file, ex.VAR_ELEM_NUM_MAP)
442+
if map is not None:
443+
return map
444+
start = 0
445+
for f in self.files:
446+
num_elem_this_file = self.get_dimension(f, ex.DIM_NUM_ELEM)
447+
if os.path.samefile(self.get_filename(f), self.get_filename(file)):
448+
return np.arange(start, start + num_elem_this_file, dtype=int) + 1
449+
start += num_elem_this_file
450+
raise ValueError("Cannot determine element number map")
434451

435452
def get_element_id_map(self, file=None):
436453
"""Get mapping of exodus element index to user- or application- defined
@@ -1623,7 +1640,7 @@ def check_consistency(self, files):
16231640
if ex_init != ex_init_params(fh):
16241641
raise TypeError("initialization parameters not consistent across files")
16251642

1626-
nblks = self.get_dimension(files[0], ex.DIM_NUM_ELEM_BLK_GLOBAL, default=0)
1643+
nblks = self.get_dimension(files[0], ex.DIM_NUM_ELEM_BLK_GLOBAL, default=1)
16271644
for file in files:
16281645
counted = 0
16291646
elem_num_map = self.f_get_element_id_map(file)
@@ -1635,7 +1652,7 @@ def check_consistency(self, files):
16351652
if counted != len(elem_num_map):
16361653
raise ValueError(
16371654
f"Expected {len(elem_num_map)} elements across all blocks in "
1638-
f"{self._filename(file)}, counted {counted}"
1655+
f"{self.get_filename(file)}, counted {counted}"
16391656
)
16401657

16411658
return

0 commit comments

Comments
 (0)