@@ -93,26 +93,53 @@ def _hack_structured_grid_dims(
9393def _hack_period_non_numeric (name : str , value : xr .DataArray ) -> dict [str , dict [int , Any ]]:
9494 from flopy4 .mf6 .gwf import Oc
9595
96- fname = ""
96+ def oc_setting_data (rec , action ):
97+ dat = {}
98+ if rec .steps .first :
99+ dat = {kper : "first" for kper in range (value .sizes ["nper" ])}
100+ key = f"{ action } { rec .rtype } "
101+ data [key ] = dat
102+ elif rec .steps .last :
103+ dat = {kper : "last" for kper in range (value .sizes ["nper" ])}
104+ key = f"{ action } { rec .rtype } "
105+ data [key ] = dat
106+ elif rec .steps .steps :
107+ steps = " " .join (str (x - 1 ) for x in rec .steps .steps )
108+ dat = {kper : f"steps { steps } " for kper in range (value .sizes ["nper" ])}
109+ key = f"{ action } { rec .rtype } "
110+ data [key ] = dat
111+ elif rec .steps .all :
112+ # check last as this defaults to True
113+ dat = {kper : "all" for kper in range (value .sizes ["nper" ])}
114+ key = f"{ action } { rec .rtype } "
115+ data [key ] = dat
116+ return dat
117+
97118 data = {}
98119 match value .dtype :
99120 case np .bool :
100- fname = name # type: ignore
101- dat = {kper : "" for kper in range (value .sizes ["nper" ]) if value .values [kper ]}
102- data [fname ] = dat
121+ dat = {kper : "" for kper in range (value .sizes ["nper" ]) if value .values [kper ]} # type: ignore
122+ data [name ] = dat
103123 case np .dtypes .StringDType ():
104124 fname = name .replace ("_" , " " )
105125 dat = {kper : value .values [kper ] for kper in range (value .sizes ["nper" ])}
106126 data [fname ] = dat
107127 case object ():
108128 if isinstance (value .values [0 ], Oc .PrintSaveSetting ):
109- for rec in value .values [0 ].printrecord :
110- if rec .steps .all :
111- dat = {kper : "all" for kper in range (value .sizes ["nper" ])}
112- key = f"PRINT { rec .rtype } "
113- data [key ] = dat
114- # for rec in value.values[0].saverecord:
115- # print("SaveRecord")
129+ if hasattr (value .values [0 ], "printrecord" ) and isinstance (
130+ value .values [0 ].printrecord , list
131+ ):
132+ action = "PRINT"
133+ for rec in value .values [0 ].printrecord :
134+ key = f"{ action } { rec .rtype } "
135+ data [key ] = oc_setting_data (rec , action )
136+ if hasattr (value .values [0 ], "saverecord" ) and isinstance (
137+ value .values [0 ].saverecord , list
138+ ):
139+ action = "SAVE"
140+ for rec in value .values [0 ].saverecord : # type: ignore
141+ key = f"{ action } { rec .rtype } "
142+ data [key ] = oc_setting_data (rec , action )
116143
117144 return data
118145
@@ -209,7 +236,6 @@ def unstructure_component(value: Component) -> dict[str, Any]:
209236
210237 # sort kper order
211238 period_blocks = dict (sorted (period_blocks .items ()))
212- print (period_blocks )
213239
214240 # setup indexed period blocks, combine arrays into datasets
215241 for kper , block in period_blocks .items ():
0 commit comments