title: Editing netcdf variables and writting out a new netcdf file using python
body: <p>I am working with MITgcm to make some simulations, specifically to work with internal waves models; I got .nc files with my results but some variables are not in exactly the same coordinates. I'll explain myself: I want to work out the components of velocity but, for some numerical reasons that I don't fully understand, horizontal velocity coordinates are in the left side of the cells and vertical coordinates on the bot side of the cells. To operate with velocity data I need to unify the reference of all coordinates.</p>
  
  <p>To do so, I have this code:</p>
  
  <pre><code> import netCDF4
   import numpy as np
  
   ncfile = netCDF4.Dataset('state.global.nc', 'r')
   u = ncfile.variables['U'][:,:,:] # nx+1 x ny x nz
   v = ncfile.variables['V'][:,:,:] # nx x ny+1 x nz
  
   nx = np.shape(u)[0] - 1
   ny = np.shape(v)[1] - 1
   nz = np.shape(u)[2]
  
   u_center = 0.5 * (u[0:nx,:,:] + u[1:nx+1,:,:])
   v_center = 0.5 * (v[:,0:ny,:] + v[:,1:ny+1,:])
  
   # Write out u_center and v_center into a new netCDF file
   ncfile_out = netCDF4.Dataset('./output.nc', 'w')
   ncfile_out.createDimension('longitude', nx)
   ncfile_out.createDimension('latitude', ny)
   ncfile_out.createDimension('level', nz)
   ncfile_out.createDimension('time', None)
   u_out = ncfile_out.createVariable('u_center', 'f4', ('time', 'longitude', 'latitude', 'level'))
   v_out = ncfile_out.createVariable('v_center', 'f4', ('time', 'longitude', 'latitude', 'level'))
   time = ncfile_out.createVariable('Time', 'i4', 'time')
   u_out[:,:,:] = u_center[:,:,:]
   v_out[:,:,:] = v_center[:,:,:]
   ncfile_out.close()
  </code></pre>
  
  <p>But it does not compile, it show me an error at line 24 and 25 (u_out[:,:,:]...); exactly says 'IndexError: size of data array does not conform to slice'. I tried changing u_out[:,:,:] by u_out[:,:,:,:] and so on. I don't know what is my mistake.</p>
  
  <p>For more information, I paste here information about my original netcdf file:</p>
  
  <pre><code>    netcdf state.global {
  dimensions:
      T = UNLIMITED ; // (10001 currently)
      Xp1 = 61 ;
      Y = 1 ;
      Z = 20 ;
      X = 60 ;
      Yp1 = 2 ;
      Zl = 20 ;
  variables:
      double Xp1(Xp1) ;
          Xp1:long_name = "X-Coordinate of cell corner" ;
          Xp1:units = "meters" ;
      double Y(Y) ;
          Y:long_name = "Y-Coordinate of cell center" ;
          Y:units = "meters" ;
      double Z(Z) ;
          Z:long_name = "vertical coordinate of cell center" ;
          Z:units = "meters" ;
          Z:positive = "up" ;
      double X(X) ;
          X:long_name = "X-coordinate of cell center" ;
          X:units = "meters" ;
      double Yp1(Yp1) ;
          Yp1:long_name = "Y-Coordinate of cell corner" ;
          Yp1:units = "meters" ;
      double Zl(Zl) ;
          Zl:long_name = "vertical coordinate of upper cell interface" ;
          Zl:units = "meters" ;
          Zl:positive = "up" ;
      double T(T) ;
          T:long_name = "model_time" ;
          T:units = "s" ;
      int iter(T) ;
          iter:long_name = "iteration_count" ;
      double U(T, Z, Y, Xp1) ;
          U:units = "m/s" ;
          U:coordinates = "XU YU RC iter" ;
      double V(T, Z, Yp1, X) ;
          V:units = "m/s" ;
          V:coordinates = "XV YV RC iter" ;
      double Temp(T, Z, Y, X) ;
          Temp:units = "degC" ;
          Temp:long_name = "potential_temperature" ;
          Temp:coordinates = "XC YC RC iter" ;
      double S(T, Z, Y, X) ;
          S:long_name = "salinity" ;
          S:coordinates = "XC YC RC iter" ;
      double Eta(T, Y, X) ;
          Eta:long_name = "free-surface_r-anomaly" ;
          Eta:units = "m" ;
          Eta:coordinates = "XC YC iter" ;
      double W(T, Zl, Y, X) ;
          W:units = "m/s" ;
          W:coordinates = "XC YC RC iter" ;
  
  // global attributes:
          :MITgcm_version = "****************" ;
          :build_user = "************" ;
          :build_host = "**************" ;
          :build_date = "*******************" ;
          :MITgcm_URL = "***************" ;
          :MITgcm_tag_id = "*******************" ;
          :MITgcm_mnc_ver = 0.9 ;
          :sNx = 30 ;
          :sNy = 1 ;
          :OLx = 2 ;
          :OLy = 2 ;
          :nSx = 2 ;
          :nSy = 1 ;
          :nPx = 1 ;
          :nPy = 1 ;
          :Nx = 60 ;
          :Ny = 1 ;
          :Nr = 20 ;
  }
  </code></pre>
  
  <p>I am just interested in velocity variables.</p>
  
  <p>Thank you so very much.</p>