Skip to content

mtzgroup/tcpb-cpp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Vinícius Cruzeiro
Oct 3, 2022
ed22807 · Oct 3, 2022
Oct 3, 2022
Oct 26, 2021
Sep 26, 2022
Oct 13, 2021
Aug 5, 2022
Aug 5, 2022
Sep 26, 2022
Oct 26, 2021
Sep 7, 2022
Sep 26, 2022
Oct 3, 2022
Apr 23, 2022

Repository files navigation

C++ TeraChem Protocol Buffer (TCPB) Client

This repository is designed to facilitate the communication between TeraChem and third party software.

The client and the server (set by the TeraChem executable) use C-style sockets for communication, and Protocol Buffers for a clean, well-defined way to serialize TeraChem input & output data.

Requirements

  • Protocol Buffers >= 3.2.0 (protoc and libprotobuf.so for C++)

Cloning this repo and setting up its submodules

git clone git@github.com:mtzgroup/tcpb-cpp.git tcpb-cpp
cd tcpb-cpp
git submodule init
git submodule update

Obtaining and installing Protocol Buffers

$ sudo apt install protobuf-compiler

Installation (with configure script)

  • Ensure protoc and libprotobuf.so (from Protocol Buffers) are in your PATH and LD_LIBRARY_PATH, respectively

  • Run ./configure gnu if using GNU compilers or ./configure intel if using Intel compilers. Other compiler options are intel and clang (not tested). To pick another install location, like /usr/local, run ./configure --prefix=/usr/local gnu

  • Run make install

  • To compile the C++ and Fortran examples, run make example

  • To install the Python interface PyTCPB, run make pytcpb. After installation, the API functions can be called from your custom Python script. Refer to examples/api/python for usage example.

  • Add the absolute path to lib into LD_LIBRARY_PATH

Installation (with CMake)

  • Ensure you have CMake version 3.8.0 or higher.

  • Run mkdir build && cd build

  • To install, for example, with GNU compilers at /usr/local, run cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCOMPILER=GNU. To use Intel compilers, the option -DCOMPILER=INTEL must be specified instead.

  • Run make install

  • The command above also compiles the C++ and Fortran examples.

  • The Python interface PyTCPB is installed by default. To deactivate its installation, add -DBUILD_PYTHON=FALSE into your CMake command. After installation, the API functions can be called from your custom Python script. Refer to examples/api/python for usage example.

  • Add the absolute path to ../lib into LD_LIBRARY_PATH

Running TeraChem in server mode

TeraChem needs to be active in server mode so that TCPB-cpp can connect to it.

TeraChem can be executed in server mode with the following command:

terachem -s 12345

where -s specifies the port number to be used and 12345 is a value picked for illustration purposes only. By default, TeraChem will use all GPUs in the machine, but users can control which GPUs are accessible by using the -g in the TeraChem command above or by setting the CUDA_VISIBLE_DEVICES environment variable before running the command above.

Examples

Compiling C++ and Fortran examples: as mentioned above, after installation with configure script, run make example. With CMake, the examples are automatically compiled and placed at the corresponding folder inside examples.

  • Using TCPB-cpp from different programming languages: examples available at the folder examples/api.

  • Native C++ examples: available at the folders examples/qm and examples/qmmm.

  • Running example binaries: By default, all example binaries expect a TeraChem server running on port 12345.

Notes for TeraChem Developers

Do not break backwards compatibility of the protocol

This means do not reuse tags in the proto/terachem_server.proto file, as this will cause old server/client versions to misinterpret the tags.

Also, it is critically important that the current values of MessageType enum are not changed since this is a key part of the protocol's header, determining how the server/client deserialize the incoming message.

Contact