Writing netcdf files

From: Almami Johnson <almamij_at_nyahnyahspammersnyahnyah>
Date: Mon Jan 27 2014 - 03:58:40 MST

Dear NCL users

I'm trying to calculate monthly potential evapotranspiration based on
Thornthwaite (1948). I have each monthly term in a file named
something.year.month.nc. I have created this script to output each
month for a given year in a file named output.year.month.nc.
The problem is all the output.year.month.nc are similar which makes me
think NCL is writing the same thing in all the output files. Could you
please take a look at this script and tell me what is wrong with it?
Another problem I'm facing is that the ncdump -h of the outputs looks like this:

dimensions:
        time = UNLIMITED ; // (0 currently)
        ncl1 = 20 ;
        ncl2 = 12 ;
        latitude = 180 ;
        longitude = 280 ;
variables:
        float pet(ncl1, ncl2, latitude, longitude) ;
                pet:units = "mm/month" ;
                pet:long_name = "Potential Evap" ;
                pet:_FillValue = 9.96921e+36f ;

My question is how to output without ncl1 and ncl2 dimensions and have
the time like time = UNLIMITED ; // (1 currently)

Thanks for your help
Almami

-------------------------------------------------------------------------------------------------------------------
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

begin

;*****************************************************************************************
; Creating Function to Read at once Precip and Convert Calendar to
Human Readable YYYYMM
;*****************************************************************************************
   undef("getPrecip")
   function getPrecip(fname[1]:string, vname[1]:string)
   local x

   begin
     f = addfile(fname, "r")
     x = f->$vname$(0,0,{-10:35},{-30:40}) ; read specified time period
   return(x)
   end

   undef("getPrecip1")
   function getPrecip1(fname[1]:string, vname[1]:string)
   local y

   begin
     f = addfile(fname, "r")
     y = f->$vname$(0,{-10:35},{-30:40}) ; read specified time period
   return(y)
   end

;*****************************************************************************************
; Creating a new variable corresponding to all the 12 months and getting each
;*****************************************************************************************

   reffile = addfile("ENSMEAN_Pre_paren_2004_05.nc", "r")
   refparam = reffile->t2m(:,0,{-10:35},{-30:40})
   printVarSummary(refparam)

   dim = dimsizes(refparam)
   ntime= dim(0)
   nlat = dim(1)
   nlon = dim(2)

   year=(/"1985","1986","1987","1988","1989","1990","1991","1992","1993","1994","1995","1996","1997","1998","1999","2000","2001","2002","2003","2004"/)
   month=(/"01","02","03","04","05","06","07","08","09","10","11","12"/)
   ndays=(/31,28,31,30,31,30,31,31,30,31,30,31/)

   nyear= dimsizes(year)
   nmon = dimsizes(month)

    paren = new((/nyear,nmon,nlat,nlon/), "float")
    sunshine = new((/nyear,nmon,nlat,nlon/), "float")
    alpha = new((/nyear,nlat,nlon/), "float")
    pot = new((/nyear,nmon,nlat,nlon/), "float")

  do i = 0, nyear - 1
   do j = 0, nmon - 1

   print("Getting data and preparing for " +year(i)+ " " +month(j)+ "
and for paren alpha and sunshine duration")

   paren(i,j,:,:) =
getPrecip("ENSMEAN_Pre_paren_"+year(i)+"_"+month(j)+".nc","t2m")
printVarSummary(paren(i,j,:,:))

   sunshine(i,j,:,:) =
getPrecip1("ENSMEAN_Pre_sund_"+year(i)+"_"+month(j)+".nc","sund")
   printVarSummary(sunshine(i,j,:,:))

   alpha(i,:,:) = getPrecip("ENSMEAN_Pre_alpha_"+year(i)+".nc","t2m")
   printVarSummary(alpha(i,:,:))

   print("Now taking potential evapotranspiration for " +year(i)+"
"+month(j)+ " and for paren alpha and sunshine duration")

   pot(i,j,:,:) =
16*((paren(i,j,:,:))^(alpha(i,:,:)))*((sunshine(i,j,:,:))/12)*((ndays(j))/30)
   copy_VarCoords(paren(i,j,:,:),pot(i,j,:,:))
   printVarSummary(pot(i,j,:,:))

;*******************************************************************************
; Creating NetCDF files for writing and put time UNLIMITED
;*******************************************************************************
    print("Creating file ENSMEAN_Pre_pot_evap_"+year(i)+"_"+month(j)+".nc")

      system("/bin/rm -f
ENSMEAN_Pre_pot_evap_"+year(i)+"_"+month(j)+".nc") ; remove any
pre-existing file
      pot_evap =
addfile("ENSMEAN_Pre_pot_evap_"+year(i)+"_"+month(j)+".nc","c") ;
open output netCDF file

; make time and UNLIMITED dimension ; recommended for most applications
    filedimdef(pot_evap,"time",-1,True)

;************************************************************************************************************
; Writing down in the NetCDF files
;************************************************************************************************************

; output variables directly
    print("Writing down pet in
ENSMEAN_Pre_pot_evap_"+year(i)+"_"+month(j)+".nc")

       pot!2 = "latitude" ; assign named dimensions
       pot!3 = "longitude"

       pot&latitude = refparam&latitude
       pot&longitude = refparam&longitude

       pot@long_name = "Potential Evap" ; assign attributes
       pot@units = "mm/month"
       pot_evap->pet = pot

   end do
  end do

end
----------------------------------------------------------------------------------------------------------------
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Mon Jan 27 03:58:54 2014

This archive was generated by hypermail 2.1.8 : Fri Feb 07 2014 - 16:39:11 MST