@@ -271,11 +271,15 @@ def _get_1d_with_bounds(dsi: xr.Dataset, name: str, units_default: str):
271271 vals , bnds , _ = roll_for_monotonic_with_bounds (vals , bnds )
272272 return vals , bnds , units
273273
274+ logger .info ("Defining CMOR axes for variable: %s" , vdef .name )
274275 axes_ids = []
275276 var_name = getattr (vdef , "name" , None )
276277 if var_name is None or var_name not in ds :
277- raise KeyError (f"Variable to write not found in dataset: { var_name !r} " )
278+ var_name = getattr (vdef , "branded_variable_name" , None )
279+ if var_name is None or var_name not in ds :
280+ raise KeyError (f"Variable to write not found in dataset: { var_name !r} " )
278281 var_da = ds [str (var_name )]
282+ logger .info ("found var_da with name: %s" , var_da .name )
279283 var_dims = list (var_da .dims )
280284 alev_id = None
281285 plev_id = None
@@ -398,10 +402,10 @@ def _get_1d_with_bounds(dsi: xr.Dataset, name: str, units_default: str):
398402 coord_vals = tvals ,
399403 cell_bounds = tbnds if tbnds is not None else None ,
400404 )
401- logger .info ("time axis id: %s" , time_id )
405+ logger .info ("time axis id: %s var_dims=%s " , time_id , var_dims )
402406 # --- vertical: standard_hybrid_sigma ---
403407 levels = getattr (vdef , "levels" , {}) or {}
404-
408+ logger . info ( "levels dict: %s" , levels )
405409 if (levels .get ("name" ) or "" ).lower () in {
406410 "standard_hybrid_sigma" ,
407411 "alevel" ,
@@ -555,6 +559,9 @@ def _get_1d_with_bounds(dsi: xr.Dataset, name: str, units_default: str):
555559 elif "zl" in var_dims :
556560 ds [var_name ] = ds [var_name ].rename ({"zl" : "olevel" })
557561 var_dims = list (ds [var_name ].dims )
562+ logger .info (
563+ "rename zl to olevel var_name %s var_dims=%s" , var_name , var_dims
564+ )
558565 cmor .set_cur_dataset_attribute ("vertical_label" , "olevel" )
559566 logger .info ("*** Define olevel axis" )
560567 values = ds ["olevel" ].values
@@ -567,9 +574,13 @@ def _get_1d_with_bounds(dsi: xr.Dataset, name: str, units_default: str):
567574 coord_vals = np .asarray (values ),
568575 cell_bounds = bnds ,
569576 )
570- elif "zi" in var_dims :
571- ds [var_name ] = ds [var_name ].rename ({"zi" : "olevel" })
577+ elif "zl" in var_dims :
578+ logger .info ("found zl axis in var_dims for variable %s" , var_name )
579+ ds [var_name ] = ds [var_name ].rename ({"zl" : "olevel" })
572580 var_dims = list (ds [var_name ].dims )
581+ logger .info (
582+ "rename zl to olevel var_name %s var_dims=%s" , var_name , var_dims
583+ )
573584 cmor .set_cur_dataset_attribute ("vertical_label" , "olevel" )
574585 logger .info ("*** Define olevel axis" )
575586 values = ds ["olevel" ].values
@@ -809,16 +820,27 @@ def write_variable(
809820 "Using CMOR table key: %s %s" , self .tables_path , self .primarytable
810821 ) # debug
811822 self .load_table (self .tables_path , self .primarytable )
812- varname = getattr (cmip_var , "physical_parameter" ).name
813- logger .info ("Preparing to write variable: %s" , varname ) # debug
814- data = ds [str (varname )]
823+ bvn_attr = getattr (cmip_var , "branded_variable_name" , None )
824+ bvn = bvn_attr .name if bvn_attr is not None else None
825+ if bvn is None :
826+ # Fall back to vdef.name when no branded variable name is provided
827+ bvn = getattr (vdef , "name" , None )
828+ if bvn is None :
829+ raise ValueError (
830+ "Cannot determine branded variable name: both "
831+ "`cmip_var.branded_variable_name` and `vdef.name` are missing."
832+ )
833+ if bvn not in ds :
834+ ds = ds .rename ({vdef .name : bvn })
835+ logger .info ("Preparing to write variable: %s" , bvn ) # debug
836+ data = ds [str (bvn )]
815837
816838 logger .info ("Ensure fx variables are written and cached" ) # debug
817839 self .ensure_fx_written_and_cached (ds )
818840
819841 units = getattr (vdef , "units" , "" ) or ""
820842 self .load_table (self .tables_path , self .primarytable )
821- logger .info ("Define CMOR axes for variable %s" , vdef . name ) # debug
843+ logger .info ("Define CMOR axes for variable %s" , bvn ) # debug
822844 axes_ids = self ._define_axes (ds , vdef )
823845 logger .info ("Prepare data for CMOR %s" , data .dtype ) # debug
824846 data_filled , fillv = filled_for_cmor (data )
@@ -828,7 +850,7 @@ def write_variable(
828850 data_filled = data_filled .rename ({"zi" : "olevel" })
829851 self .load_table (self .tables_path , self .primarytable )
830852
831- var_entry = getattr (cmip_var , "branded_variable_name" , varname )
853+ var_entry = getattr (cmip_var , "branded_variable_name" , bvn )
832854 if hasattr (var_entry , "name" ):
833855 var_entry = var_entry .name
834856 elif hasattr (var_entry , "value" ):
0 commit comments