Re: to calculate climatology using history files without specifying variable names

From: Dennis Shea (shea AT XXXXXX)
Date: Thu Apr 25 2002 - 11:18:06 MDT


>
>I have used another computer with
>large memory to calculate the 4D climatology. Now I have another question. I
>have done many experiments. Now I have the files 1978-01.nc through 1997-12.nc.
>All of these files have the same variables and attributes. I want to calculate
>the climatologies(monthly, seasonal and annual) of all these same variables in
>these files and write the climatologies of these variables into a single file.
>Is there a method to do this without specifying each variable name, without any
>other indirect outputs? Thanks.

Yes there is. Use "getfilevarnames" and use the $...$ syntax
to substitute a string where a variable name is expected..

An outline follows. I'm assuming u want climatologies
for 3D and 4D variables.

This uses what I call the 'simple but inefficient method'
of creating netCDF files. Note: depending of the number
of variables and the size of the input files
this can be very inefficient for writing netCDF. There are faster
ways but for now try this approach.

untested!!

load "/fs/cgd/data0/shea/nclGSUN/contributed.ncl"
begin

  diri = "..." ; input directory
  
  diro = diri ; output directory
  filo = "CLM.nc" ; output file name

  fili = systemfunc("cd "+diri+" ; ls 19*nc")
  pathi = diri+fili
  fi = addfiles (pathi, "r") ; establish list of files

  f = addfile (pathi(0), "r") ; read the 1st file to get info
  varName = getfilevarnames(f) ; list of variables on the file
  print (varName)
  nvar= dimsizes(varName) ; # of variables
  
  lat = f->lat
  lon = f->lon
  lev = f->lev

  nlat= dimsizes(lat)
  mlon= dimsizes(lon)
  klev= dimsizes(lev)
  
  NCFILE = diro+filo
  system ("/usr/bin/rm "+ NCFILE) ; remove any pre-exist clm
  ncdf = addfile(NCFILE,"c") ; create the file reference

  nmos = 12
  month = ispan(1,nmos,1)
  month!0 = "month"
  month@long_name = "month"
  month&month = month
  
  ncdf->month = month
  ncdf->lev = lev
  ncdf->lat = lat
  ncdf->lon = lon
  
  do nv=0,nvar-1
     x = addfiles_GetVar (fi, pathi, varName(nv))
     rank = dimsizes(dimsizes(x)) ; # of dimensions
       
     if (rank.eq.3 .or. rank.eq.4) then
         xClm = clmMonTLL(x) ; contributed.ncl
         ncdf->$varName(nv)$ = xClm ; write to file
         print ("Climatology: "+varName(nv)+" "+systemfunc("date"))
     end if
        
     delete(x)
  end do
     
end

_______________________________________________
ncl-talk mailing list
ncl-talk AT ucar.edu
http://mailman.ucar.edu/mailman/listinfo/ncl-talk



This archive was generated by hypermail 2b29 : Fri Apr 26 2002 - 18:54:53 MDT