@@ -110,6 +110,7 @@ def unstructure_component(value: Component) -> dict[str, Any]:
110110 blocks [block_name ] = {}
111111 period_data = {}
112112 period_blocks = {} # type: ignore
113+ period_block_name = None
113114
114115 for field_name in block .keys ():
115116 # Skip child components that have been processed as bindings
@@ -150,51 +151,43 @@ def unstructure_component(value: Component) -> dict[str, Any]:
150151 field_value ,
151152 structured_grid_dims = value .parent .data .dims , # type: ignore
152153 )
153-
154+ if "period" in block_name :
155+ period_block_name = block_name
154156 period_data [field_name ] = {
155157 kper : field_value .isel (nper = kper )
156158 for kper in range (field_value .sizes ["nper" ])
157159 }
158160 else :
159- # TODO why not putting in block here but doing below? how does this even work
160- if np .issubdtype (field_value .dtype , np .str_ ):
161- period_data [field_name ] = {
162- kper : field_value [kper ] for kper in range (field_value .sizes ["nper" ])
163- }
164- else :
165- if block_name not in period_data :
166- period_data [block_name ] = {}
167- period_data [block_name ][field_name ] = field_value # type: ignore
161+ blocks [block_name ][field_name ] = field_value
168162 else :
169163 if field_value is not None :
164+ # only include boolean fields (keywords) if true
170165 if isinstance (field_value , bool ):
171166 if field_value :
172167 blocks [block_name ][field_name ] = field_value
173168 else :
174169 blocks [block_name ][field_name ] = field_value
175170
176- if block_name in period_data and isinstance (period_data [block_name ], dict ):
177- dataset = xr .Dataset (period_data [block_name ])
178- blocks [block_name ] = {block_name : dataset }
179- del period_data [block_name ]
180-
181171 for arr_name , periods in period_data .items ():
182172 for kper , arr in periods .items ():
183173 if kper not in period_blocks :
184174 period_blocks [kper ] = {}
185175 period_blocks [kper ][arr_name ] = arr
186176
187177 for kper , block in period_blocks .items ():
188- dataset = xr .Dataset (block )
189- blocks [f"{ block_name } { kper + 1 } " ] = {block_name : dataset }
178+ assert isinstance (period_block_name , str )
179+ blocks [f"{ period_block_name } { kper + 1 } " ] = {
180+ period_block_name : xr .Dataset (block , coords = block [arr_name ].coords )
181+ }
190182
191- # total temporary hack! manually set solutiongroup 1. still need to support multiple..
183+ # total temporary hack! manually set solutiongroup 1.
184+ # TODO still need to support multiple..
192185 if "solutiongroup" in blocks :
193186 sg = blocks ["solutiongroup" ]
194187 blocks ["solutiongroup 1" ] = sg
195188 del blocks ["solutiongroup" ]
196189
197- return {name : block for name , block in blocks .items () if name != "period" }
190+ return {name : block for name , block in blocks .items () if name != period_block_name }
198191
199192
200193def _make_converter () -> Converter :
0 commit comments