Re: simple question: adding a parameter to a WRF output file

From: Dennis Shea <shea_at_nyahnyahspammersnyahnyah>
Date: Thu, 16 Apr 2009 07:12:34 -0600

offline, I suggested that Gerry use the netCDF operator "ncks"
=====
You could create the "new diagnostic value" in NCL;
create the netCDF; then, using the system command,
invoke the ncks

     f = addfile ("wrf_input.nc" , "r")

     ... your code ..

     fout = addfile ("wrf_add.nc" , "c") ;

     fout->FOO = whatever

     delete(fout) ; don't think this is necessary

     system("ncks wrf_input.nc wrf_add.f")

or vice versa

=====
This still might take some time even with "ncks".
Why?????

Well if the new variable being written is (say) FOO(Time,....)
*and* the time dimension is unlimited, then the file must
be rewritten. As I understand it, when the record dimension is
unlimited the variables are interleaved.
=====
The following is from an email I sent some time ago.
It is a conceptual 'pictograph' of what data on a
netCDF files look like when written with and without
an unlimited record dimension
[usually "time"] .

Note: my mailer sometime reformats my emails [frustrating!]
so I'm not sure how the alignments will look when sent.
========================

Let's say there are 2 variables
a(time,lev,lat,lon),
b(time,lat,lon)
where time>1

If the record dimension is not tagged as unlimited ,
the data are written as a block write.

      ---------
      netCDF header stuff:
      variable/dimension names, dimension sizes, attributes,......
       ---------
      | | t=0 [lev,lat,lon]
      | | t=1
      | |
      | a |
      | |
      | |
      | | t=N
       ---------
followed by
       ---------
      | | t=0 [lat,lon]
      | | t=1
      | |
      | b |
      | |
      | |
      | | t=N
       ---------

In this case, adding a new variable "c" would be 'simple'.
Just add (append) a block of data at the end. [Actually,
there is more to it than that.]

================

With an unlimited dimension the variables are interleaved with
the record dimension [typically, "time"]

                 ________
     t=0 | |
                 | a | a(lev,lat,lon) at t=0
                 | |
                 | |
                 --------
                 | |
                 | b | b(lat,lon) at t=0
                 --------
                 ________
      t=1 | |
                 | a | a(lev,lat,lon) at t=1
                 | |
                 | |
                 --------
                 | |
                 | b | b(lat,lon) at t=1
                 --------
                    :
                    :
                    :
                 ________
      t=N | |
                 | a | a(lev,lat,lon) at t=N
                 | |
                 | |
                 --------
                 | |
                 | b | b(lat,lon) at t=N
                 --------

Now if you have one or more (say) records to add, the data
can be appended to the current file because you are just adding
additional records at the end.

                 ________
    t=N+1 | |
                 | a' | a'(lev,lat,lon) at t=N+1
                 | |
                 | |
                 --------
                 | |
                 | b' | b'(lat,lon) at t=N+1
                 --------
                 ________
    t=N+2 | |
                 | a' | a'(lev,lat,lon) at t=N+2
                 | |
                 | |
                 --------
                 | |
                 | b' | b'(lat,lon) at t=N+2
                 --------
                    :
                   etc
                    :

+++++++++++++++++++
Now the issue with adding a completely new variable (say) "c(time,...)
Since, the variables are interleaved, the variable "c" must be inserted
at each time step. No way to do this without a file rewrite.

D

Gerry Creager wrote:
> Thanks, Mary.
>
> I did try that last night, but the wrfout I'm working on is fairly big,
> and things were progressing so slowly I'd thought I had something
> broken. I'm processing the data now to see how it'll look in VAPOR, and
> ncl_filedump tells me I likely have a couple of small tweaks to make
> before this is all resolved, anyway.
>
> Appreciate the help!
> Regards, Gerry
>
> Mary Haley wrote:
>> Hi Gerry,
>>
>> You should be able to do this easily if you open the file with "w"
>> instead of "r":
>>
>> a = addfile("wrfout.nc","w")
>>
>> ....some calculations and other stuff...
>>
>> a->diagnostics_var = some_local_var
>>
>> Of course, you'd want to replace "diagnostics_var" with whatever name
>> you want on the file.
>>
>> --Mary
>>
>> On Apr 15, 2009, at 7:59 PM, Gerry Creager wrote:
>>
>>> Hello, again,
>>>
>>> I'm reading a WRF output file, operating on it, and creating a new
>>> diagnostic value. I need to write it back into the wrfout as an append.
>>>
>>> Is there a fairly simple method to accomplish this, or do I need to read
>>> in, then write out all the variables?
>>>
>>> Thanks, Gerry
>>> --
>>> Gerry Creager -- gerry.creager_at_tamu.edu
>>> Texas Mesonet -- AATLT, Texas A&M University
>>> Cell: 979.229.5301 Office: 979.458.4020 FAX: 979.862.3983
>>> Office: 1700 Research Parkway Ste 160, TAMU, College Station, TX 77843
>>> _______________________________________________
>>> ncl-talk mailing list
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Thu Apr 16 2009 - 07:12:34 MDT

This archive was generated by hypermail 2.2.0 : Thu Apr 16 2009 - 10:05:49 MDT