@@ -239,21 +239,17 @@ def construct_fields(self) -> list[Field | VectorField]:
239239 single_fields : dict [str , Field ] = {}
240240 vector_fields : dict [str , VectorField ] = {}
241241 scalar_field_names = self .scalar_field_names
242- if "U" in scalar_field_names and "V" in scalar_field_names :
243- single_fields ["U" ] = Field ("U" , self )
244- single_fields ["V" ] = Field ("V" , self )
245- vector_fields ["UV" ] = VectorField ("UV" , single_fields ["U" ], single_fields ["V" ], interp_method = Ux_Velocity ())
246-
247- if "W" in scalar_field_names :
248- single_fields ["W" ] = Field ("W" , self )
249- vector_fields ["UVW" ] = VectorField (
250- "UVW" , single_fields ["U" ], single_fields ["V" ], single_fields ["W" ], interp_method = Ux_Velocity ()
251- )
252242
253- fields : dict [str , Field | VectorField ] = {** single_fields , ** vector_fields }
254- for varname in set (scalar_field_names ) - set (single_fields .keys ()):
255- fields [varname ] = Field (str (varname ), self )
243+ for varname in set (scalar_field_names ):
244+ single_fields [varname ] = Field (str (varname ), self )
245+
246+ for vfield_name , components in self .vector_field_components .items ():
247+ interp_method = Ux_Velocity ()
248+
249+ component_fields = [single_fields [name ] for name in components ]
250+ vector_fields [vfield_name ] = VectorField (vfield_name , * component_fields , interp_method = interp_method )
256251
252+ fields : dict [str , Field | VectorField ] = {** single_fields , ** vector_fields }
257253 return list (fields .values ())
258254
259255 def assert_valid_field_data (self , field_data : ux .UxDataArray ) -> None :
@@ -276,7 +272,11 @@ def from_ugrid_conventions(
276272
277273 grid = UxGrid (ds .uxgrid , z = ds .coords ["zf" ], mesh = mesh )
278274 ds = _discover_ux_U_and_V (ds )
279- model = cls (ds , grid )
275+
276+ vector_fields = resolve_vector_fields (ds , vector_fields )
277+ assert_vector_field_components_in_dataset (ds , vector_fields )
278+
279+ model = cls (ds , grid , vector_fields )
280280 model ._fields = model .construct_fields ()
281281 for f in model ._fields :
282282 if isinstance (f , Field ):
0 commit comments