@@ -810,31 +810,36 @@ def main():
810810 DS = DS .isel (** {model .dim_phalf : slice (None , None , - 1 )})
811811 print (f"{ Red } NOTE: all variables flipped along vertical dimension. "
812812 f"Top of the atmosphere is now index = 0" )
813-
814- # Reorder dimensions
815- print (f"{ Cyan } Transposing variable dimensions to match order "
816- f"expected in CAP" )
813+
817814 # Reorder dimensions - transpose each variable individually
818815 print (f"{ Cyan } Transposing variable dimensions to match order "
819816 f"expected in CAP" )
820817
821818 # Define the desired dimension order
822819 dim_order = [model .dim_time , model .dim_pfull , model .dim_lat , model .dim_lon ]
823820
821+ # Collect all transposed variables before modifying dataset
822+ transposed_vars = {}
823+
824824 # Transpose each data variable individually based on its actual dimensions
825- for var in DS .data_vars :
826- var_dims = list (DS [var ].dims )
825+ for var_name in list (DS .data_vars .keys ()): # Use list() to avoid iteration issues
826+ var = DS [var_name ]
827+ var_dims = list (var .dims )
828+
827829 # Build desired order using only dimensions this variable actually has
828830 desired_order = [d for d in dim_order if d in var_dims ]
829831 # Add any dimensions not in our standard list
830832 for d in var_dims :
831833 if d not in desired_order :
832834 desired_order .append (d )
835+
833836 # Only transpose if order needs changing
834837 if var_dims != desired_order :
835- DS [var ] = DS [var ].transpose (* desired_order )
836- # DS = DS.transpose(model.dim_time, model.dim_pfull, model.dim_lat,
837- # model.dim_lon, ...)
838+ transposed_vars [var_name ] = var .transpose (* desired_order )
839+
840+ # Apply all transpositions at once
841+ for var_name , transposed_var in transposed_vars .items ():
842+ DS [var_name ] = transposed_var
838843
839844 # Change longitude from -180-179 to 0-360
840845 if min (DS [model .dim_lon ]) < 0 :
0 commit comments