Due to the current gap in continued funding from the U.S. National Science Foundation (NSF), the NSF Unidata Program Center has temporarily paused most operations. See NSF Unidata Pause in Most Operations for details.
Hello! First I would like to start on a positive note, since I very much appreciate netcdf and its usage by AMBER, as this certainly is one of the saner file formats out there used for MD trajectories. This is precisely what I use netcdf for in my program, to read AMBER created netcdf files. However this does not work as expected. (1) Recently I changed from 4.0.1 to 4.1.1, where 4.0.1 worked nicely with the Offset64Bits flag in the NcFile constructor, now I have to use Classic, which appears rather strange to me. Using Offset64Bits with 4.1.1 will return false for is_valid() after construction. (ncks output: Opened file emim_trif_50-1.mdcrd: dimensions = 6, variables = 7, global atts. = 8, ID = 65536, type = NC_FORMAT_64BIT) (2) With both 4.0.1 and 4.1.1 reproducible, but seemingly random, crashes occur when reading AMBER files. Running a small test program via valgrind gives the following: [ OPEN FILE A [ READ VALUES "coordinates" from 0,0,0 to 9,0,2 [ OPEN FILE B [ READ VALUES "coordinates" from 0,0,0 to 9,0,2 [ FIRST ERROR BY valgrind (AFAIK ALWAYS after having read data from each file once, so probably occuring when trying to open file A for the second time... Invalid write of size 1 at 0x7D1AB65: swapn4b (in /usr/lib/libnetcdf.so.6.0.0) by 0x7D1E015: ncx_getn_float_float (in /usr/lib/libnetcdf.so.6.0.0) by 0x7D2896F: getNCv_float (in /usr/lib/libnetcdf.so.6.0.0) by 0x7D2E5E1: nc3_get_vara_float (in /usr/lib/libnetcdf.so.6.0.0) by 0x7D09589: nc_get_vara_float (in /usr/lib/libnetcdf.so.6.0.0) by 0x4E374B6: NcVar::get(float*, long const*) const (in /usr/lib/libnetcdf_c++.so.5.0.0) by 0x4267AD: gepetto::system::amber::netcdf::Parser::readTAX(std::string const&, long*, long*, float*) (parser.cpp:334) by 0x406EB5: calc(std::vector<std::string, std::allocator<std::string> > const&) (correlation.cpp:82) by 0x407FC9: main (correlation.cpp:179) Address 0x955b728 is 0 bytes after a block of size 40 alloc'd at 0x4C25509: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x406BBE: calc(std::vector<std::string, std::allocator<std::string> > const&) (correlation.cpp:49) by 0x407FC9: main (correlation.cpp:179) [ READ LOTS OF MORE VALUES, always cycling through all files [ SECOND ERROR after arbitrary number of reads/file switches, presumably again when trying to open one of the files... valgrind: m_mallocfree.c:248 (get_bszB_as_is): Assertion 'bszB_lo == bszB_hi' failed. valgrind: Heap block lo/hi size mismatch: lo = 112, hi = 4717696923473706361. This is probably caused by your program erroneously writing past the end of a heap block and corrupting heap metadata. If you fix any invalid writes reported by Memcheck, this assertion failure will probably go away. Please try that before reporting this as a bug. at 0x3802B8B9: ??? (in /usr/lib/valgrind/memcheck-amd64-linux) by 0x3802BA88: ??? (in /usr/lib/valgrind/memcheck-amd64-linux) by 0x380372D8: ??? (in /usr/lib/valgrind/memcheck-amd64-linux) by 0x38001B19: ??? (in /usr/lib/valgrind/memcheck-amd64-linux) by 0x38064842: ??? (in /usr/lib/valgrind/memcheck-amd64-linux) by 0x38073F84: ??? (in /usr/lib/valgrind/memcheck-amd64-linux) sched status: running_tid=1 Thread 1: status = VgTs_Runnable at 0x4C2497E: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x4E362ED: NcVar::~NcVar() (in /usr/lib/libnetcdf_c++.so.5.0.0) by 0x4E36318: NcVar::~NcVar() (in /usr/lib/libnetcdf_c++.so.5.0.0) by 0x4E3A312: NcFile::close() (in /usr/lib/libnetcdf_c++.so.5.0.0) by 0x42D1A6: gepetto::system::amber::netcdf::Parser::close() (parser.h:82) by 0x42CDF0: gepetto::system::amber::netcdf::Parser::open(std::string const&) (parser.h:70) by 0x406E74: calc(std::vector<std::string, std::allocator<std::string> > const&) (correlation.cpp:80) by 0x407FC9: main (correlation.cpp:179) Please note that I have tried this scheme with different numbers of files, and with both 4.0.1 and 4.1.1, always to the same effect. Please also note that every call to FilePointer = new NcFile(args), is preceded by OldFilePointer->close() Feel free to offer any advice and suggestions, including how to turn this into a proper bug report. Thank you, Thomas Taylor
netcdfgroup
archives: