[MITgcm-support] Data formats and archiving hints
Martin Losch
Martin.Losch at awi.de
Mon Aug 3 04:50:41 EDT 2009
Jody,
there is a lot of personal taste involved in output decision. I like
to use NetCDF output (only from the diagnostics-pkg) together with the
gluemnc-script for medium sized to large problems (I guess, your 32
CPU would fall into that category), if the the topology is simple (lat/
lon or cartesian grids, mainly because gluemnc does not work for cubed
sphere grids). The main reason: It's compact and you can quickly look
at results with handy tools such as ncview (http://meteora.ucsd.edu/~pierce/ncview_home_page.html
). Generally it's much easier to share output with NetCDF (because
it's a standard format).
However, there are some small limitations to the specific NetCDF
output of the MITgcm, owing to generality considerations and limited
programming man-power: The "missing_value" attribute is not
implemented properly, sometimes annoying, and also other attributes
and conventions/units are often non-standard e.g. coordinate variables
on irregular grids, or vertical coordinates in diagnostics output,
which make it sometimes less convenient to use standard tools for
plotting (e.g. Ferret). For this reason it's sometimes necessary to
modify the netCDF output with the help of the nco's (netcdf operators, http://nco.sourceforge.net
, another very useful set of utilites) or other tools. If you are
using only matlab, all of this is not very relevant. With netcdf
(there is rdmnc.m) you can load single variables and single snapshot
times from a monolithic file in the same way you can do it with rdmds.
On really large integrations (order 500x500 surface nodes and more), I
do not use NetCDF, because you run quickly into a netcdf-file size
limitation of 2GB (the MITgcm netcdf interface can handle that by
opening new files, once you reach this limit, but it beats some of the
purpose of netcdf). This limitation has been lifted with more recent
versions of netcdf (3.6 I think), but only to 4GB, as far as I know.
When you deal with really large files (order 1GB for 1 3D-field)
netcdf becomes pretty useless as far as I am concerned.
On some platforms, there is little bit of an overhead for NetCDF
output, but I have no idea how big it actually is (some utilities do
not vectorize and use up to 3% of the total run time in some of my
runs in a SX8 Vector computer). My experience is that MDS output is
far more robust: it never fails, whereas NetCDF sometimes requires a
little fiddling with library paths, etc, e.g., when I move to a new
machine, it takes about ten minutes to set up a build_options file and
compile, but with netcdf it has taken me as long as an hour (Ed will
say, that's because I am incompetent (o;).
I do not recommend using the netcdf-pickup files (although they
generally work fine, but you cannot change the tiling in the middle of
a run without extra work, etc.).
Your other problem: I am afraid, that there is no automatism. You'll
need to document your runs yourself, painfully boring as it is (I
create hand-written tables with notes, comments, parameter values on
it, that end up in folders, that I can never find when I need them).
Martin
On Aug 3, 2009, at 4:45 AM, Ryan Abernathey wrote:
> Hi Jody,
>
> You may have gathered from my recent posts to this list that I have
> been wrestling with the same question. I started out several years
> ago using MDS files but have switched to NetCDF for my latest
> project. I have concluded that NetCDF is much better for several
> reasons:
>
> 1) NetCDF files are not stored in memory by MATLAB. With MDS files,
> I often ran up against MATLAB's memory limitations when dealing with
> large 64-bit 3D data files. This is not an issue using NetCDF, as
> the data is read directly from the filesystem only when it is
> needed. Also, there is no "load time" when instantiating a NetCDF
> file in MATLAB--it happens instantly. This is far superior to how
> MDS files are handled, and consequently there is no limit on the
> size of NetCDF files.
>
> 2) Grid and coordinate information is embedded in the NetCDF files,
> along with units, descriptions, and time information (i.e.
> metadata). This means that you don't need to keep referencing the
> manual to figure out the precise spatial coordinates for each of
> your diagnostics. Very useful.
>
> 3) The output from all timesteps is condensed into one file.
> Combined with the ability to output different diagnostics into the
> same file (using the diagnostics package), this means you can
> potentially store all of the output you wish to analyze from a
> particular run in one single file. I suspect this would solve all
> your organizational problems.
>
> However, there is one major disadvantage, especially for large runs.
>
> * The globalFiles or useSingleCpuIO options do not work with NetCDF
> output. Each tile writes its own file. So when your run is done you
> have to use a script called gluemnc (available as a MATLAB or shell
> script) to join together the different tiles into one global netCDF
> file. (Your post gave the impression you aren't currently using this
> option, so this extra step probably won't seem like a big deal
> anyway.)
>
> Overall I would definitely recommend switching to netCDF. The long-
> term benefits will outweigh the temporary pain.
>
> Hope this helps!
>
> -Ryan
>
> p.s. Many people apparently prefer to keep using MDS pickup files,
> but that is a different thread...
>
>
> On Aug 2, 2009, at 2:48 PM, Klymak Jody wrote:
>
>>
>> Hi all,
>>
>> As an amateur numerical modeller using the MITgcm I thought I'd ask
>> for folks' data format and archiving ideas/advice.
>>
>> I do my analysis in Matlab, and am unlikely to change that. I've
>> been writing the bare binary files (mds?) and reading those in fine
>> with the matlab rdmds.m function. It works very well, and I
>> appreciate the effort that went into it.
>>
>> However, as I get to larger simulations (ahem, larger for me means
>> 16 or 32 tiles instead of 4 or 8), I start to wonder about the
>> thousands of tile files on my machine, and if that is really the
>> most efficient way for me to be storing my data. So:
>>
>> Is there an inherent advantage to switching to netcdf?
>>
>> To be honest I'm not sure what files are produced from the netcdf
>> output - it looks like they are per-tile, and monolithic in that
>> one file contains the whole run for that tile? If correct, how
>> fast are they to read in matlab? I'm running a simulation that
>> will reach 3Gb/tile.
>>
>> Is there more meta information? I am always flumoxed that there is
>> no "time" in the MDS meta files, so I have to figure out what dt
>> was for my run and multiply by iteration number.
>>
>> Parallel discussion: How do folks organize and keep track of their
>> model runs? I have a large number now, and quite frankly I forget
>> which ones are trash, and which ones I am using for my latest
>> paper. Sure, I have to be more organized, but rather than invent
>> the wheel, I'd love to hear how folks who have been doing this for
>> a while keep track. Being lazy, automagic methods are always
>> appreciated...
>>
>> Thanks for any thoughts folks feel like sharing...
>>
>> Cheers, Jody
>> _______________________________________________
>> MITgcm-support mailing list
>> MITgcm-support at mitgcm.org
>> http://mitgcm.org/mailman/listinfo/mitgcm-support
>
> _______________________________________________
> MITgcm-support mailing list
> MITgcm-support at mitgcm.org
> http://mitgcm.org/mailman/listinfo/mitgcm-support
More information about the MITgcm-support
mailing list