3
3
4
4
5
5
# Other SELF modules
6
- import self .geometry as geometry
6
+ import pyself .geometry as geometry
7
7
8
8
class model :
9
9
def __init__ (self ):
10
10
self .solution = None
11
11
self .pvdata = None # Pyvista data
12
12
self .varnames = None
13
13
self .varunits = None
14
- self .nvar = 0
15
14
self .geom = geometry .semquad ()
16
15
17
16
def load (self , hdf5File ):
@@ -26,26 +25,56 @@ def load(self, hdf5File):
26
25
27
26
if 'controlgrid' in list (f .keys ()):
28
27
29
- s = f ['controlgrid/solution' ]
30
- self .solution = []
31
- i = 0
32
- for k in s .keys ():
33
- if k == 'metadata' :
34
- for v in s [f"{ k } /name" ].keys ():
35
- self .solution .append ( {"name" :s [f"{ k } /name/{ v } " ][()][0 ].decode ('utf-8' ), "units" :s [f"{ k } /units/{ v } " ][()][0 ].decode ('utf-8' ), 'data' : None } )
36
- self .nvar = len (self .solution )
28
+ controlgrid = f ['controlgrid' ]
29
+ for group_name in controlgrid .keys ():
30
+
31
+ if ( group_name == 'geometry' ):
32
+ continue
33
+
34
+ group = controlgrid [group_name ]
35
+ # Create a list to hold data for this group
36
+ setattr (self , group_name , [])
37
+ group_data = getattr (self , group_name )
38
+ print (f"Loading { group_name } group" )
39
+
40
+ # Load metadata information
41
+ if ( 'metadata' in list (group .keys ()) ):
42
+ for v in group [f"metadata/name" ].keys ():
43
+
44
+ name = group [f"metadata/name/{ v } " ].asstr ()[()][0 ]
45
+ try :
46
+ units = group [f"metadata/units/{ v } " ].asstr ()[()][0 ]
47
+ except :
48
+ units = "error"
49
+
50
+ group_data .append ({
51
+ "name" : name ,
52
+ "units" : units ,
53
+ 'data' : None
54
+ })
37
55
else :
38
- d = s [k ]
39
- N = d .shape [2 ]
40
- # Find index for this field
41
- i = 0
42
- for sol in self .solution :
43
- if sol ['name' ] == k :
44
- break
45
- else :
46
- i += 1
47
-
48
- self .solution [i ]['data' ] = da .from_array (d , chunks = (self .geom .daskChunkSize ,N ,N ))
56
+ print (f"Error: /controlgrid/{ group_name } /metadata group not found in { hdf5File } ." )
57
+ return 1
58
+
59
+ for k in group .keys ():
60
+ k_decoded = k .encode ('utf-8' ).decode ('utf-8' )
61
+ if k == 'metadata' :
62
+ continue
63
+ else :
64
+ print (f"Loading { k_decoded } field" )
65
+ # Load the actual data
66
+ d = group [k ]
67
+ N = d .shape [2 ]
68
+
69
+ # Find index for this field
70
+ i = 0
71
+ for sol in group_data :
72
+ if sol ['name' ] == k_decoded :
73
+ break
74
+ else :
75
+ i += 1
76
+
77
+ group_data [i ]['data' ] = da .from_array (d , chunks = (self .geom .daskChunkSize , N , N ))
49
78
50
79
self .generate_pyvista ()
51
80
@@ -97,8 +126,13 @@ def generate_pyvista(self):
97
126
98
127
# Load fields into pvdata
99
128
k = 0
100
- for var in self .solution :
101
- self .pvdata .point_data .set_array (var ['data' ].flatten (),var ['name' ])
102
- k += 1
129
+ for attr in self .__dict__ :
130
+ if not attr in ['pvdata' ,'varnames' ,'varunits' ,'geom' ]:
131
+ controlgroup = getattr (self , attr )
132
+ #print(f"Loading {attr} into pvdata")
133
+ for var in controlgroup :
134
+ # print(f"Loading {var['name']} into pvdata")
135
+ self .pvdata .point_data .set_array (var ['data' ].flatten (),var ['name' ])
136
+ k += 1
103
137
104
138
print (self .pvdata )
0 commit comments