1+ import os
12import numpy as np
23from 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