forked from 3rdparty/wrf-python
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							70 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							70 lines
						
					
					
						
							2.4 KiB
						
					
					
				| from __future__ import print_function, division | |
|  | |
| import os | |
| import numpy as np | |
| from netCDF4 import Dataset | |
| from wrf import getvar, ALL_TIMES, to_np | |
| import xarray | |
|  | |
| filename_list = ["/Users/ladwig/Documents/wrf_files/" | |
|                  "wrf_vortex_single/wrfout_d02_2005-08-28_00:00:00", | |
|                  "/Users/ladwig/Documents/wrf_files/wrf_vortex_single/" | |
|                  "wrfout_d02_2005-08-28_03:00:00", | |
|                  "/Users/ladwig/Documents/wrf_files/wrf_vortex_single/" | |
|                  "wrfout_d02_2005-08-28_06:00:00", | |
|                  "/Users/ladwig/Documents/wrf_files/wrf_vortex_single/" | |
|                  "wrfout_d02_2005-08-28_09:00:00"] | |
|  | |
| result_shape = (4, 1, 96, 96) | |
|  | |
| # Let's get the first time so we can copy the metadata later | |
| f = Dataset(filename_list[0]) | |
| # By setting squeeze to False, you'll get all the dimension names. | |
| z1 = getvar(f, "T2", 0, squeeze=False) | |
| xlat = getvar(f, "XLAT", 0) | |
| xlong = getvar(f, "XLONG", 0) | |
|  | |
|  | |
| z_final = np.empty(result_shape, np.float32) | |
|  | |
| # Modify this number if using more than 1 time per file | |
| times_per_file = 1 | |
|  | |
| data_times = [] | |
| xtimes = [] | |
| for timeidx in range(result_shape[0]): | |
|     # Compute the file index and the time index inside the file | |
|     fileidx = timeidx // times_per_file | |
|     file_timeidx = timeidx % times_per_file | |
|  | |
|     f = Dataset(filename_list[fileidx]) | |
|     z = getvar(f, "T2", file_timeidx) | |
|     t = getvar(f, "Times", file_timeidx) | |
|     xt = getvar(f, "xtimes", file_timeidx) | |
|     data_times.append(to_np(t)) | |
|     xtimes.append(to_np(xt)) | |
|     z_final[timeidx, :] = z[:] | |
|     f.close() | |
|  | |
| # Let's make the metadata. Dimension names should copy easily if you set | |
| # sqeeze to False, otherwise you can just set them yourself is a tuple of | |
| # dimension names. Since you wanted | |
| # to keep the bottom_top dimension for this 2D variable (which is normally | |
| # removed), I'm doing this manually. | |
| z_dims = ["Time", "bottom_top", "south_north", "west_east"] | |
|  | |
| # Xarray doesn't copy coordinates easily (it always complains about shape | |
| # mismatches), so do this manually | |
| z_coords = {} | |
| z_coords["Time"] = data_times | |
| z_coords["XTIME"] = ("Time",), xtimes | |
| z_coords["XLAT"] = ("south_north", "west_east"), xlat | |
| z_coords["XLONG"] = ("south_north", "west_east"), xlong | |
| z_name = "T2" | |
|  | |
| # Attributes copy nicely | |
| z_attrs = {} | |
| z_attrs.update(z1.attrs) | |
|  | |
| z_with_meta = xarray.DataArray(z_final, coords=z_coords, dims=z_dims, | |
|                                attrs=z_attrs, name=z_name)
 | |
| 
 |