This is some interesting stuff. Ok here's stepping through the
system_of_equations example 3, which calls exodus file writing methods:

(lldb)
Process 45495 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = step over
    frame #0: 0x00000001008b039c
libmesh_dbg.0.dylib`libMesh::ExodusII_IO_Helper::create(this=0x000000010d01b800,
filename="out.e") at exodusII_io_helper.C:1207
   1204      mode |= EX_NOCLASSIC;
   1205 #endif
   1206
-> 1207      ex_id = exII::ex_create(filename.c_str(), mode, &comp_ws,
&io_ws);
   1208
   1209      EX_CHECK_ERR(ex_id, "Error creating ExodusII mesh file.");
   1210
Target 0: (example-dbg) stopped.
(lldb) p mode
(int) $1 = 584
(lldb) p comp_ws
(int) $2 = 8
(lldb) p io_ws
(int) $3 = 8
(lldb) p filename.c_str()
(const std::__1::basic_string<char, std::__1::char_traits<char>,
std::__1::allocator<char> >::value_type *) $4 = 0x00007ffeefbfdc29 "out.e"
(lldb) n
Process 45495 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = step over
    frame #0: 0x00000001008b03cb
libmesh_dbg.0.dylib`libMesh::ExodusII_IO_Helper::create(this=0x000000010d01b800,
filename="out.e") at exodusII_io_helper.C:1209
   1206
   1207      ex_id = exII::ex_create(filename.c_str(), mode, &comp_ws,
&io_ws);
   1208
-> 1209      EX_CHECK_ERR(ex_id, "Error creating ExodusII mesh file.");
   1210
   1211      if (verbose)
   1212        libMesh::out << "File created successfully." << std::endl;
Target 0: (example-dbg) stopped.
(lldb) p ex_id
(int) $5 = 65536

And then here is MOOSE's simple_diffusion:

(lldb)
Process 45477 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = step over
    frame #0: 0x000000010758d39c
libmesh_dbg.0.dylib`libMesh::ExodusII_IO_Helper::create(this=0x0000000111831e00,
filename="simple_diffusion_out.e") at exodusII_io_helper.C:1207
   1204      mode |= EX_NOCLASSIC;
   1205 #endif
   1206
-> 1207      ex_id = exII::ex_create(filename.c_str(), mode, &comp_ws,
&io_ws);
   1208
   1209      EX_CHECK_ERR(ex_id, "Error creating ExodusII mesh file.");
   1210
Target 0: (moose_test-dbg) stopped.
(lldb) p mode
(int) $0 = 584
(lldb) p comp_ws
(int) $1 = 8
(lldb) p io_ws
(int) $2 = 8
(lldb) p filename.c_str()
(const std::__1::basic_string<char, std::__1::char_traits<char>,
std::__1::allocator<char> >::value_type *) $3 = 0x00007ffeefbfdbb9
"simple_diffusion_out.e"
(lldb) n
Exodus Library Error: [ex_create]
Error: file create failed for simple_diffusion_out.e in NETCDF4 and CLOBBER
mode.
This library probably does not support netcdf-4 files.
    exerrval = 13
Process 45477 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = step over
    frame #0: 0x000000010758d3cb
libmesh_dbg.0.dylib`libMesh::ExodusII_IO_Helper::create(this=0x0000000111831e00,
filename="simple_diffusion_out.e") at exodusII_io_helper.C:1209
   1206
   1207      ex_id = exII::ex_create(filename.c_str(), mode, &comp_ws,
&io_ws);
   1208
-> 1209      EX_CHECK_ERR(ex_id, "Error creating ExodusII mesh file.");
   1210
   1211      if (verbose)
   1212        libMesh::out << "File created successfully." << std::endl;
Target 0: (moose_test-dbg) stopped.
(lldb) p ex_id
(int) $4 = -1

The arguments into exII::ex_create (except for the name of course) are the
exact same!!

So if I look into the hdf5 libraries that the different executables are
dynamically linking to I get different libraries:

$ otool -L moose_test-dbg | grep hdf5
/Users/lindad/hdf5/build-1.10.5/../installed-1.10.5/lib/libhdf5_hl.100.dylib
(compatibility version 102.0.0, current version 102.2.0)
/Users/lindad/hdf5/build-1.10.5/../installed-1.10.5/lib/libhdf5.103.dylib
(compatibility version 105.0.0, current version 105.0.0)

$ otool -L example-dbg | grep hdf5
/Users/lindad/hdf5/build-1.10.5/../installed-1.10.5/lib/libhdf5_hl.100.dylib
(compatibility version 102.0.0, current version 102.2.0)

The moose executable is somehow linking to multiple hdf5 libraries, one the
traditional library and the other the "high level" library. The libmesh
executable only links to the high level. This is despite the fact that they
are using the exact same linking flags:

-Wl,-rpath,/Users/lindad/projects/moose/scripts/../libmesh/installed-hdf5-1.10.5/lib
-L/Users/lindad/projects/moose/scripts/../libmesh/installed-hdf5-1.10.5/lib
-lmesh_dbg -L/Users/lindad/hdf5/installed-1.10.5/lib -lhdf5
-Wl,-rpath,/Users/lindad/hdf5/installed-1.10.5/lib
-L/Users/lindad/projects/moose/petsc/arch-moose/lib
-Wl,-rpath,/Users/lindad/projects/moose/petsc/arch-moose/lib
-Wl,-rpath,/opt/X11/lib -L/opt/X11/lib
-Wl,-rpath,/opt/moose/mpich-3.3/clang-8.0.0/lib
-L/opt/moose/mpich-3.3/clang-8.0.0/lib -Wl,-rpath,/opt/moose/llvm-8.0.0/lib
-L/opt/moose/llvm-8.0.0/lib
-Wl,-rpath,/opt/moose/gcc-8.3.0/lib/gcc/x86_64-apple-darwin18.5.0/8.3.0
-L/opt/moose/gcc-8.3.0/lib/gcc/x86_64-apple-darwin18.5.0/8.3.0
-Wl,-rpath,/opt/moose/gcc-8.3.0/lib -L/opt/moose/gcc-8.3.0/lib
-Wl,-rpath,/opt/moose/llvm-8.0.0/lib/clang/8.0.0/lib/darwin
-L/opt/moose/llvm-8.0.0/lib/clang/8.0.0/lib/darwin -lpetsc -lHYPRE -lcmumps
-ldmumps -lsmumps -lzmumps -lmumps_common -lpord -lscalapack -lsuperlu_dist
-lflapack -lfblas -lparmetis -lmetis -lptesmumps -lptscotchparmetis
-lptscotch -lptscotcherr -lesmumps -lscotch -lscotcherr -lX11 -lmpifort
-lgfortran -lgomp -lquadmath -lc++ -lmpicxx -lmpi -lpmpi -lomp
-lclang_rt.osx -lm -lz -lstdc++ -ldl

I simply don't understand why the hdf5_hl library would get picked up in
either case. Shouldn't I have to specify -lhdf5_hl in order for that to
happen?


On Sun, Jul 14, 2019 at 5:10 PM John Peterson <jwpeter...@gmail.com> wrote:

> Regarding HDF versions, I can’t remember exactly what we are using at the
> moment but I think it’s 1.8.x? I will check and get back to you.
>
> On Jul 14, 2019, at 5:00 PM, John Peterson <jwpeter...@gmail.com> wrote:
>
> There isn’t a lot of logic behind what gets updated when beyond “as
> necessary”. The most recent netcdf update fixed an issue with writing hdf5
> files for us. I didn’t update exodusII at the time since it there was no
> specific issue that needed to be addressed, but it is quite old relative to
> what’s available on github, so it should probably be done at some point.
>
>
> On Jul 14, 2019, at 4:35 PM, Alexander Lindsay <alexlindsay...@gmail.com>
> wrote:
>
> So I didn't get any replies to this
> <https://sourceforge.net/p/libmesh/mailman/message/36709086/>, but now
> I'm getting more curious. I'm curious why we fairly consistently update our
> netcdf version, but seem to never update our exodusii contrib? Are we sure
> that everything is compatible? I ran `make check` on my personal build of
> netcdf 4.6.2 with hdf5-1.10.5 and all tests pass, so I'm wondering whether
> the incompatibility may be at a higher level? Is our older exodusii source
> using "incorrect" APIs in the newer netcdf versions when hdf5 is available?
>
> I can look this up, but what does netcdf do differently when hdf5 is or is
> not enabled in our configure?
>
> _______________________________________________
> Libmesh-devel mailing list
> Libmesh-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/libmesh-devel
>
>
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to