Opened 4 years ago
Last modified 4 years ago
#276 accepted Defect
Problems creating NetCDf output with many output levels
Reported by: | rrigby | Owned by: | ignacio |
---|---|---|---|
Priority: | minor | Milestone: | FLEXPART 10 |
Component: | FP coding/compilation | Version: | FLEXPART 10.4 |
Keywords: | Cc: |
Description
When doing some FLEXPART test runs with many output levels, the jobs would fail quite quickly when creating the NetCDF output file, e.g.:
NetCDF: Invalid argument Stopped
When testing, this error seemed to occur with more than 20 output levels, or thereabouts.
I had a look at the NetCDF writing / creation code, and the attached patch seems to have fixed things for us, which mostly just removes the specific values for the chunk sizes, so default values are used.
I'm sure other approaches/ fixes would be possible as well.
I thought it might be of interest, and was worth letting you know.
Thanks and all the best,
Richard
Attachments (1)
Change History (4)
Changed 4 years ago by rrigby
comment:1 Changed 4 years ago by pesei
- Component changed from FP other to FP coding/compilation
- Milestone set to FLEXPART 10
- Summary changed from Problmes creating NetCDf output with many output levels to Problems creating NetCDf output with many output levels
comment:2 Changed 4 years ago by rrigby
Thanks for taking a look.
Honestly, I didn't investigate thoroughly, but realised that the problem seemed to be with NetCDF creation, so just removed the custom options for cache_size and chunk size, so that the defaults would be used.
The patch also includes an altered deflate_level, but that's just down to preference.
I have just been investigating a bit more ...
The cache_size is set in netcdf_output_mod.f90 at:
312 cache_size = 16 * nnx * nny * numzgrid
In an example which causes problems, the output grid dimensions are 3600 * 1800 * 25, so the cache_size_value would be:
16 * 3600 * 1800 * 25 = 2592000000
cache_size is a 4 byte integer, so this value exceeds the largest value which can be stored.
Testing with changing cache_size to an 8 byte integer means that the cache_size value is set correctly in FLEXPART, but the same problem still occurs, as I'm guessing cache_size is also a 4 byte integer in the NetCDF libraries.
If the cache_size option is removed from nf90_create(), then the NetCDF file is created, and things appear to run.
The output NetCDF file seems to be readable, though, Panoply does seem to have issues plotting the data.
Where the chunk size value is set for the species concentration output variables:
479 chunksizes = (/ nnx, nny, numzgrid, 1, 1, 1 /)
changing this to:
chunksizes = (/ nnx, nny, 1, 1, 1, 1 /)
seems to produce output files which are also readable by Panoply.
As it requires large (unusually large?) output grid dimensions to trigger the issue, I would completely understand if you were happy to leave things as they are.
When the code was written, some thought was obviously put in to choosing suitable cache and chunk sizes, and we are happy to patch for local needs.
Hope that's all of some use.
Thanks again,
Richard
comment:3 Changed 4 years ago by ignacio
- Owner set to ignacio
- Status changed from new to accepted
Thank you for letting us know. I am not a netCDF specialist and personally don't use it. Could you please give some background, how you found that the compression level and chunksize was the problem?