gms-bbg / gamess-issues

GAMESS issue tracking
7 stars 1 forks source link

cmake issue building libcchem #21

Open skaffen-amtiskaw opened 4 years ago

skaffen-amtiskaw commented 4 years ago

I am running into an issue with the cmake build of libcchem. I've built all required dependencies with no errors. I've built a regular sockets-bound exe of gamess. I've built a patched boost and ga for libcchem. I ran cmake with all of the dependency paths supplied to the listed cmake flags in LIBCCHEM_CMAKE.md and successfully generate the config with no errors or warnings.

When I run make after generating the config, I get the following error:

[root@node406 build]# make [ 20%] Built target array [ 26%] Built target base [ 46%] Built target basis [ 53%] Building CXX object src/integrals/CMakeFiles/integrals.dir/integrals.cpp.o In file included from /share/apps/src/gamess-POS/gamess/libcchem/src/integrals/integrals.cpp:2:0: /share/apps/src/gamess-POS/gamess/libcchem/src/integrals/rysq.hpp:8:20: fatal error: rysq.hpp: No such file or directory

include

                ^

compilation terminated. make[2]: [src/integrals/CMakeFiles/integrals.dir/integrals.cpp.o] Error 1 make[1]: [src/integrals/CMakeFiles/integrals.dir/all] Error 2 make: *** [all] Error 2

That rysq.hpp file exists at that location in integrals and in adapter. Any advice?

My environment:

centos 7 gcc 6.1 atlas 3.10 openmpi 1.10.1 hdf5 1.8.17 cuda 9.2 2 NVIDIA V100

davpoolechem commented 4 years ago

Hi,

Did you build the "base" LibCChem code before building the LibCChem Rys Quadrature code (in libcchem/rysq). If so, you would want to build the Rys Quadrature code first, as it is one of the dependencies for the rest of the LibCChem code. You can do this by going into the libcchem/rysq directory and going through a CMake build process in that directory.

Also, I am pretty sure the LibCChem will not work using a socket-based version of GAMESS. I believe LibCChem requires MPI, in part because it uses Global Arrays, which runs on top of MPI.

skaffen-amtiskaw commented 4 years ago

That was it. I compiled rysq and it went right through. I didn't see that listed as a required step in any libcchem build instructions.

Thanks for the help

skaffen-amtiskaw commented 4 years ago

I was a little too hasty closing the issue. I ran cmake in rysq/, then ran make and ran make install. Then I ran cmake, make, make install in libcchem. Those produced 2 static libs- /share/apps/src/gamess-POS/gamess/libcchem/lib/libcchem.a and librysq.a

According to these notes: 2) Compiling LIBCCHEM This consists of 5 substeps, i) creating the right Boost library ii) creating the right GA library iii) configuring LIBCCHEM iv) compiling LIBCCHEM v) installing LIBCCHEM libraries plus there is a 6th step to compile GAMESS' interface to LIBCCHEM, vi) compile GAMESS to LIBCCHEM interface All six steps are encapsulated into a single script, using the information collected by 'config': chdir ~/gamess/libcchem ./build-cchem >& build-cchem.log &

I now need to compile gamess to the LIBCCHEM interface, however I do not have a build-cchem script in libcchem. I downloaded the most recent gamess-current.tar.gz last week.

When I try to go to the lked step I get an error that it can't find cchem.o and zga.o

gfortran: error: cchem.o: No such file or directory gfortran: error: zga.o: No such file or directory

I found a 4 year old version of the build-cchem script on github, and I can see the comp steps being performed:

echo '==============================================' echo 'the fourth step, compiling LIBCCHEM, begins...' echo '==============================================' echo Beginning compilation of LIBCCHEM at date... # make >& make-libcchem.log # echo End compilation of LIBCCHEM at date # set OK=true if (!(-e src/bindings/.libs/libcchem_gamess.a)) set OK=false if (!(-e src/.libs/libcchem.a)) set OK=false if (!(-e rysq/src/.libs/librysq.a)) set OK=false

According to the old build-cchem script, I should have a libcchem_gamess.a at that location or in libcchem/lib. I do not have that lib after making rysq and libcchem

I feel like I am missing a step here, but I don't see what I should be doing after the cmake, make, make install steps according to the the numerous readmes and install notes. My steps have been-

compile ddi compile regular sockets version of gamess lked gamess 01 compile patched boost and ga rerun config and select libcchem options cmake, make, make install rysq cmake, make, make install libcchem ...? lked gamess cchem.01

I would really appreciate any help. I've been scouring the net for any kind of build help for libcchem, but most of the info is from almost a decade ago.

davpoolechem commented 4 years ago

Hi,

The libcchem_gamess.a library is a relic of the old build-cchem script, and it is not used anymore in current versions of LibCChem. Instead, the compilation of the cchem.src and zga.src files should (!) usually be built as part of the make or compall scripts. That being said, I have run into this issue myself before, so this is something I will look in to.

Anyway, you can build the cchem and zga object files manually by running "./comp cchem" and "./comp zga", respectively, in the main GAMESS directory.

It should also be noted that the aaa.readme.1st file is out of date at this point. Rather, you will want to use the LIBCCHEM_CMAKE.md file for instructions on how to build LibCChem.

skaffen-amtiskaw commented 4 years ago

Dave,

Almost there! I started from scratch and I have run ./comp cchem successfully, but ./comp zga fails with:

[root@node406 gamess]# ./comp zga ======================== zga ============================== Tue Feb 25 14:19:03 EST 2020 Copying source code, zga.src does not require activation. cp: cannot stat ‘/share/apps/src/gamess-cchem/gamess/source/zga.src’: No such file or directory gfortran -c -fdefault-integer-8 -g -ffpe-trap=invalid,zero,overflow -O2 -std=legacy -w -fno-aggressive-loop-optimizations zga.f gfortran: error: zga.f: No such file or directory gfortran: fatal error: no input files compilation terminated. unset echo Tue Feb 25 14:19:03 EST 2020 0.024u 0.017s 0:00.04 75.0% 0+0k 0+0io 0pf+0w Compilation failure for zga, please fix the problem.

The only zga I have in source/ is [root@node406 gamess]# ls -lrtha /share/apps/src/gamess-cchem/gamess/source/ | grep zga -rw-r--r-- 1 root root 323 Oct 1 08:36 zga.c

davpoolechem commented 4 years ago

Hi,

Ah, that's on me. It is ga.src that compiles with comp, while zga is a C source file.

What I would try is to manually compile zga using "gcc -c source/zga.c", then moving the resulting object file into the object/ directory. Then try linking.

skaffen-amtiskaw commented 4 years ago

That worked, I also had to modify the lked script to stop adding /lib to the end of the default centos atlas install dir- /usr/lib64/atlas

Now I get a ton of undefined reference errors from libga.a and libcchem.a looking for various MPI routines like MPI_Graph_create, MPI::Comm::Comm(), MPI_Send, etc

I am using openmpi 1.10.1, and the ga compile compile went fine with no reported errors. I looked back at the config.log and it was pointing to the correct mpi compilers. I uncommented the line that the ga Makefile said to if I had linking errors, and I recompiled everything downstream, but still getting the same issues.

davpoolechem commented 4 years ago

Hmmmmm... this is an error that I have run into before, but I have not yet found a solution to it. I will dig in deeper and get back to you, if that is all right.

davpoolechem commented 4 years ago

Hi,

I dug into the error that you ran into, because I had a similar error on another computer that I am trying to install GAMESS+LibCChem on, and I am guessing that they have the same solution.

I was able to fix my MPI issues by doing the following:

  1. Switching the MPI library. I found that, by switching from OpenMPI to MPICH2, I was able to get rid of the MPI errors. You may also be able to fix the error by using a more modern version of OpenMPI, as I have had OpenMPI work with GAMESS+LibCChem in the past.

  2. Make sure the GA library you use is compiled using the same MPI library as you use in GAMESS. If not, recompile GA.

Let me know how this goes!

davpoolechem commented 4 years ago

If you haven't done the above already, another option is adding the -lmpi_cxx flag to the $MPI_LIBS list in lked.