Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for reading Gromacs TNG trajectory files #768

Merged
merged 79 commits into from
Oct 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
661df52
DRR - Cpptraj: Start adding TNG format support.
Oct 7, 2019
4f18d30
DRR - Cpptraj: Add ZLIB to external config for TNG
Oct 7, 2019
3afae0c
DRR - Cpptraj: Remove tng example dir placeholder
Oct 7, 2019
343b1cf
Add some more sources.
Oct 7, 2019
b0d68aa
Add more missing files.
Oct 7, 2019
44590b6
Modify some include paths. Add more files.
Oct 7, 2019
6fabd4b
More missing files.
Oct 7, 2019
0d0dd83
Another missing file. Trying to get minimal version that works still...
Oct 7, 2019
e918b35
Add remaining files.
Oct 7, 2019
3b89aea
Make the test depend on existence of the example file.
Oct 7, 2019
fb4b6c1
Have clean rule remove test output as well.
Oct 7, 2019
cffff5e
DRR - Cpptraj: Start adding traj class for TNG
Oct 7, 2019
88c5bb3
Change libtngfile to libtng
Oct 7, 2019
847d101
DRR - Cpptraj: Add TNG stuff to configure
Oct 7, 2019
5c7df27
Change tng to tng_io, seems to be what the actually library wants to …
Oct 7, 2019
9b35e59
Add missing stuff to Traj template
Oct 7, 2019
fa36504
Add file open and number of atoms check
Oct 7, 2019
8b630e8
Add get number of frames from TNG
Oct 7, 2019
cf6fe78
Add TNG link stuff
Oct 7, 2019
9e5df04
Get TNG distance scaling factor
Oct 8, 2019
ba105f8
Ensure conversion to Angstroms
Oct 8, 2019
a593d9d
Use the same types defined in the TNG headers
Oct 8, 2019
5344fca
Add code to try to get TNG box status
Oct 8, 2019
77539c0
Add TNG trajectory close and destructor
Oct 8, 2019
3e62e7a
Since the TNG API doesn't seem to have a simple way of telling if a g…
Oct 8, 2019
df9aa70
Fix up TNG build and clean in Makefile
Oct 8, 2019
868a1f4
Fix up TNG box detection.
Oct 8, 2019
46bcc3c
Properly free memory allocated for box detection.
Oct 8, 2019
bff4301
Add TNG velocity detection.
Oct 8, 2019
7caa2b6
Clean up TNG exponential factor calc
Oct 8, 2019
1d557a8
Allocate a temp coords array for TNG
Oct 8, 2019
cbd34f7
Start trying to add TNG read. Currently only works for a single frame.
Oct 8, 2019
7143a4d
Fix up TNG openTrajin function
Oct 8, 2019
5bc2eec
Try a different way of reading. Does not seem to work.
Oct 8, 2019
b6b24d1
Merge branch 'master' into addtng
Oct 11, 2019
8c33f48
Try reading header every time file is opened. No matter what I do or …
Oct 11, 2019
a07228e
DRR - Now we're starting to get somewhere. Needed to call the next_fr…
Oct 11, 2019
dcf3bb5
DRR - In TNG files, frames is relative to the MD simulation, sets is …
Oct 11, 2019
2069132
DRR - Start handling blocks
Oct 11, 2019
863f0dd
DRR - Add box read
Oct 11, 2019
95a6376
DRR - Read positions
Oct 11, 2019
689ccc6
Fix a mem leak
Oct 11, 2019
86da44e
DRR - Add missing enum entry for TNG
Oct 11, 2019
4fee60d
DRR - Add velocities and forces read
Oct 11, 2019
20e32bb
DRR - Add time read
Oct 11, 2019
7b23265
DRR - Comment out unneeded call
Oct 11, 2019
1f6266d
DRR - Make values a class var
Oct 11, 2019
9d9faa7
DRR - Change setupTrajin so it only looks for blocks that are there.
Oct 11, 2019
d7f03a2
Have setupTrajin only look for blocks we are interested in
Oct 11, 2019
c700000
DRR - Use common routines in read
Oct 11, 2019
fc5d446
DRR - Clean up some debug messages. Still needs to be tested with an …
Oct 11, 2019
f1b48e0
Merge branch 'master' into addtng
Oct 17, 2019
0fdf1ed
DRR - Start adding gromacs dump file format for comparing
Oct 17, 2019
57d9cda
DRR - Finish gmxdump setup
Oct 17, 2019
d24aa9c
DRR - Add coords write
Oct 17, 2019
c49875a
DRR - Do force and velocity dump. Put gromacs conversions into Constants
Oct 17, 2019
d89ab23
DRR - Constants moved to Constants.h
Oct 17, 2019
c0bba77
DRR - Turns out if you dump from a TNG file, different routines are u…
Oct 17, 2019
686c36f
DRR - Fix conversion of velocity and force info from TNG
Oct 17, 2019
fda62a5
DRR - Add TNG format output for debug
Oct 17, 2019
6bef544
DRR - Fix conversion of forces
Oct 17, 2019
13d7f58
DRR - Write forces
Oct 17, 2019
305db60
DRR - TNG read test. Use topology in amber format (converted from gro…
Oct 17, 2019
8ab6a3f
Enable TNG test
Oct 17, 2019
5dbc017
Protect TNG test
Oct 17, 2019
3179625
DRR - Add tng entry to configure library help
Oct 17, 2019
3ea17a6
DRR - Add configure test for when TNG is specified. If static library…
Oct 17, 2019
aca1fb5
DRR - Add input key for TNG
Oct 17, 2019
f76825e
DRR - Print tng precision
Oct 18, 2019
735fb0b
DRR - Try to add a seek for TNG
Oct 18, 2019
ced4edc
DRR - Add tng test with offset
Oct 18, 2019
01ba892
Fix test name
Oct 18, 2019
ab593bd
DRR - Add TNG stuff to README. Separate out libraries that are bundle…
Oct 18, 2019
5cf71a8
DRR - The TNG test can actually run in parallel...
Oct 18, 2019
1c01f52
Rename class to be more consistent with existing gromacs traj parsers
Oct 18, 2019
570af0e
DRR - Add tng to trajectory table
Oct 18, 2019
ca7b5d7
DRR - Revision bump for adding TNG read support.
Oct 18, 2019
574c92f
DRR - Since TNG depends on zlib, make sure its disabled if no zlib pr…
Oct 18, 2019
b75bf53
DRR - Have LGTM ignore tng for now.
Oct 18, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 28 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,18 @@ the following libraries:
* NetCDF
* BLAS
* LAPACK
* ARPACK (now bundled with CPPTRAJ)
* Bzip2
* Gzip
* Bzip2
* Parallel NetCDF (-mpi build only, for NetCDF trajectory output in parallel)
* CUDA (-cuda build only)
* FFTW (mostly optional; required for PME functionality)
* [helPME](https://github.com/andysim/helpme) (optional; required for PME functionality)
* FFTW (mostly optional; required for PME functionality and very large FFTs)

CPPTRAJ also makes use of the following libraries that are bundled with CPPTRAJ. External ones can be used in place of these if desired.

* ARPACK; without this diagonalization of sparse matrices in `diagmatrix` will be slow
* [helPME](https://github.com/andysim/helpme), required for PME functionality
* XDR for reading GROMACS XTC trajectories
* TNG for reading GROMACS TNG trajectories

`./configure gnu` should be adequate to set up compilation for most systems.
For systems without BLAS/LAPACK/ARPACK and/or NetCDF libraries installed,
Expand All @@ -92,21 +97,24 @@ be specified to enable OpenMP parallelization, e.g. `./configure -openmp gnu`.
An MPI-parallelized version of CPPTRAJ can also be built using the `-mpi` flag.
CPPTRAJ can be built with both MPI and OpenMP; when running this build users
should take care to properly set OMP_NUM_THREADS if using more than 1 MPI
thread per node. A CUDA build is now also available via the `-cuda` flag.
By default CPPTRAJ will be configured for multiple shader models; to restrict
the CUDA build to a single shader model use the SHADER_MODEL environment variable.
Any combination of `-cuda`, `-mpi`, and `-openmp` may be used.

The configure script by default sets everything up to link dynamically. The
`-static` flag can be used to force static linking. If linking errors are
encountered you may need to specify library locations using the `--with-LIB=`
options. For example, to use NetCDF compiled in `/opt/netcdf` use the option
`--with-netcdf=/opt/netcdf`. Alternatively, individual libraries can be
disabled with the `-no<LIB>` options. The `-libstatic` flag
can be used to static link only libraries that have been specified.
process per node (the number of processes * threads should not be greater than
the number of physical cores on the machine).

A CUDA build is now also available via the `-cuda` configure flag. However, currently
only a few commands benefit from this (see the manual for details). By default CPPTRAJ
will be configured for multiple shader models; to restrict the CUDA build to a single
shader model set the SHADER_MODEL environment variable before running `configure`.

Any combination of `-cuda`, `-mpi`, and `-openmp` may be used. The configure script by
default sets everything up to link dynamically. The `-static` flag can be used to force
static linking. If linking errors are encountered you may need to specify library locations
using the `--with-LIB=` options. For example, to use NetCDF compiled in `/opt/netcdf`
use the option `--with-netcdf=/opt/netcdf`. Alternatively, individual libraries can be
disabled with the `-no<LIB>` options. The `-libstatic` flag can be used to static link
only libraries that have been specified.

After `configure` has been successfully run, `make install` will
compile and place the cpptraj binary in the `bin/` subdirectory. Note that
compile and place the cpptraj binary in the `$CPPTRAJHOME/bin` subdirectory. Note that
on multithreaded systems `make -j X install` (where X is an integer > 1
and less than the max # cores on your system) will run much faster.
After installation, It is highly recommended that `make check` be run as
Expand Down Expand Up @@ -203,6 +211,8 @@ External libraries bundled with CPPTRAJ

* CPPTRAJ uses the [ARPACK](https://www.caam.rice.edu//software/ARPACK/) library to calculate eigenvalues/eigenvectors from large sparse matrices.

* CPPTRAJ uses the [xdrfile](http://www.gromacs.org/Developer\_Zone/Programming\_Guide/XTC\_Library) library for reading XTC file; specifically a somewhat updated version from [MDTRAJ](https://github.com/mdtraj/mdtraj) that includes some bugfixes and enhancements. See `src/xdrfile/README` for details.
* CPPTRAJ uses the [xdrfile](http://www.gromacs.org/Developer\_Zone/Programming\_Guide/XTC\_Library) library for reading XTC files; specifically a somewhat updated version from [MDTRAJ](https://github.com/mdtraj/mdtraj) that includes some bugfixes and enhancements. See `src/xdrfile/README` for details.

* CPPTRAJ uses the [GROMACS TNG](https://github.com/gromacs/tng) library for reading TNG files. See `sec/tng/README` for details.

* The reciprocal part of the PME calculation is handled by the [helPME](https://github.com/andysim/helpme) library by Andy Simmonett.
71 changes: 58 additions & 13 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ UsageFull() {
echo " --with-<lib>=<DIR> : Use library in specified directory."
echo " -l<lib>=<FILE> : Use specified library file."
echo " -no<lib> : Disable library."
echo " Libraries: netcdf pnetcdf zlib bzlib blas lapack arpack fftw3 readline sanderlib xdrfile"
echo " Libraries: netcdf pnetcdf zlib bzlib blas lapack arpack fftw3 readline sanderlib xdrfile tng"
echo " Note: pnetcdf is needed for writing NetCDF trajectories with MPI."
echo " LINKING OPTIONS"
echo " -static : Use static linking."
Expand Down Expand Up @@ -142,22 +142,25 @@ CPPTRAJLIB=''

# ----- External Libraries -----------------------
# Total number of external libraries
NLIB=13
NLIB=14
# Library indices
# Original: FFT ARPACK LAPACK BLAS NETCDF PARANC BZIP ZIP READLINE XDRFILE
# Libraries containing definition of a function should appear *after*
# any source files or object files which use it.
LNETCDF=0
LPARANC=1 # Parallel NetCDF
LBZIP=2
LZIP=3
LARPACK=4
LLAPACK=5
LBLAS=6
LFFTW3=7
LREADLINE=8
LXDRFILE=9
LSANDER=10
LTIMER=11
LCUDA=12
LTNGFILE=3 # This has to come before ZLIB since it depends on ZLIB
LZIP=4
LARPACK=5
LLAPACK=6
LBLAS=7
LFFTW3=8
LREADLINE=9
LXDRFILE=10
LSANDER=11
LTIMER=12
LCUDA=13

# LIB_STAT = Library status:
# off : Do not use library.
Expand Down Expand Up @@ -281,6 +284,15 @@ LIB_D_ON[$LCUDA]='-DCUDA'
LIB_DOFF[$LCUDA]=''
LIB_TYPE[$LCUDA]='cpp'

LIB_STAT[$LTNGFILE]='bundled'
LIB_CKEY[$LTNGFILE]='tng'
LIB_HOME[$LTNGFILE]='tng'
LIB_FLAG[$LTNGFILE]='-ltng_io'
LIB_STTC[$LTNGFILE]='libtng_io.a'
LIB_D_ON[$LTNGFILE]='-DHAS_TNGFILE'
LIB_DOFF[$LTNGFILE]=''
LIB_TYPE[$LTNGFILE]='ld'

for ((i=0; i < $NLIB; i++)) ; do
LIB_LINK[$i]='dynamic'
done
Expand Down Expand Up @@ -579,6 +591,21 @@ EOF
TestProgram " Checking Xdrfile" "$CXX" "$CXXFLAGS ${LIB_INCL[$LXDRFILE]}" testp.cpp "${LIB_FLAG[$LXDRFILE]}"
}

TestTngfile() {
cat > testp.cpp <<EOF
#include <tng/tng_io.h>
tng_trajectory_t traj_;
bool Unused(const char* fname) {
tng_function_status stat = tng_util_trajectory_open(fname, 'r', &traj_);
if (stat != TNG_SUCCESS)
return false;
return true;
}
int main() { return 0; }
EOF
TestProgram " Checking TNG" "$CXX" "$CXXFLAGS ${LIB_INCL[$LTNGFILE]}" testp.cpp "${LIB_FLAG[$LTNGFILE]}"
}

TestSanderlib() {
cat > testp.cpp <<EOF
#include "sander.h"
Expand Down Expand Up @@ -640,6 +667,7 @@ TestLibraries() {
if [ "${LIB_TEST[$LFFTW3]}" = 'yes' ] ; then TestFFTW3 ; fi
if [ "${LIB_TEST[$LREADLINE]}" = 'yes' ] ; then TestReadline ; fi
if [ "${LIB_TEST[$LXDRFILE]}" = 'yes' ] ; then TestXdrfile ; fi
if [ "${LIB_TEST[$LTNGFILE]}" = 'yes' ] ; then TestTngfile ; fi
if [ "${LIB_TEST[$LSANDER]}" = 'yes' ] ; then TestSanderlib ; fi
if [ "${LIB_TEST[$LCUDA]}" = 'yes' ] ; then TestCuda ; fi
}
Expand Down Expand Up @@ -876,7 +904,7 @@ SetupLibraries() {
lhdir="$ladir"
fi
if [ "${LIB_LINK[$i]}" = 'static' ] ; then
if [ -z "${LIB_STTC[$i]}" ] ; then
if [ -z "${LIB_STTC[$i]}" -o ! -f "$lhdir/${LIB_STTC[$i]}" ] ; then
WrnMsg "Cannot link '${LIB_CKEY[$i]}' statically."
lflag="-L$lhdir ${LIB_FLAG[$i]}"
else
Expand Down Expand Up @@ -917,6 +945,12 @@ SetupLibraries() {
LIB_INCL[$i]="$linc"
fi
done
# Take care of any library dependencies.
if [ "${LIB_STAT[$LZIP]}" = 'off' -a "${LIB_STAT[$LTNGFILE]}" != 'off' ] ; then
# TNG depends on libz
echo "Warning: TNG depends on libz; disabling TNG."
LIB_STAT[$LTNGFILE]='off'
fi
}

#-------------------------------------------------------------------------------
Expand Down Expand Up @@ -2044,6 +2078,12 @@ if [ "${LIB_STAT[$LXDRFILE]}" = 'bundled' ] ; then
else
XDRFILE_TARGET='noxdrfile'
fi
# TNG
if [ "${LIB_STAT[$LTNGFILE]}" = 'bundled' ] ; then
TNGFILE_TARGET=${LIB_FLAG[$LTNGFILE]}
else
TNGFILE_TARGET='notngfile'
fi
# Arpack
if [ "${LIB_STAT[$LARPACK]}" = 'bundled' ] ; then
ARPACK_TARGET=${LIB_FLAG[$LARPACK]}
Expand Down Expand Up @@ -2091,6 +2131,8 @@ READLINE_LIB=${LIB_FLAG[$LREADLINE]}

XDRFILE_TARGET=$XDRFILE_TARGET

TNGFILE_TARGET=$TNGFILE_TARGET

ARPACK_TARGET=$ARPACK_TARGET

FFT_TARGET=$FFT_TARGET
Expand All @@ -2114,6 +2156,9 @@ cat > $external_config <<EOF
# configured using: $CONFIGURECMD
EOF
BuildRules $external_config nvcc cc f77
if [ "${LIB_STAT[$LZIP]}" != 'off' ] ; then
echo "ZLIB_FLAG=${LIB_FLAG[$LZIP]}" >> $external_config
fi

# ----- Create directories if necessary ----------
if [ ! -e "$CPPTRAJBIN" ] ; then
Expand Down
4 changes: 2 additions & 2 deletions devtools/Template.sh
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ elif [ "$TYPE" = 'Traj' ] ; then
void Info();
int readVelocity(int, Frame&);
int readForce(int, Frame&);
int processWriteArgs(ArgList&);
int processWriteArgs(ArgList&, DataSetList const&);
int processReadArgs(ArgList&);
// -------------------------------------------
# ifdef MPI
Expand Down Expand Up @@ -273,7 +273,7 @@ void $CLASS::WriteHelp() {
}

/** Process write arguments. */
int $CLASS::processWriteArgs(ArgList& argIn) {
int $CLASS::processWriteArgs(ArgList& argIn, DataSetList const& DSLin) {

return 0;
}
Expand Down
40 changes: 39 additions & 1 deletion doc/cpptraj.lyx
Original file line number Diff line number Diff line change
Expand Up @@ -12013,7 +12013,7 @@ Cpptraj currently understands the following trajectory file formats:
\begin_layout Standard
\align center
\begin_inset Tabular
<lyxtabular version="3" rows="20" columns="4">
<lyxtabular version="3" rows="21" columns="4">
<features tabularvalignment="middle">
<column alignment="center" valignment="top" width="25text%">
<column alignment="center" valignment="top" width="25text%">
Expand Down Expand Up @@ -12571,6 +12571,44 @@ xtc
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Plain Layout
Gromacs TNG
\end_layout

\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Plain Layout
tng
\end_layout

\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Plain Layout
.tng
\end_layout

\end_inset
</cell>
<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
\begin_inset Text

\begin_layout Plain Layout
Read Only
\end_layout

\end_inset
</cell>
</row>
<row>
<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
\begin_inset Text

\begin_layout Plain Layout
CIF
\end_layout
Expand Down
1 change: 1 addition & 0 deletions lgtm.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
path_classifiers:
test:
- "src/readline/*"
- "src/tng/*"
extraction:
cpp:
prepare:
Expand Down
10 changes: 10 additions & 0 deletions src/Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,15 @@ namespace Constants {
* itself is derived from sqrt(1 / ((AMU_TO_KG * NA) / (1000 * CAL_TO_J))).
*/
const double AMBERTIME_TO_PS = 20.455;
/// Pico prefix
const double PICO = 1e-12;
/// Convert Gromacs force units (kJ / mol * nm) to Amber units (kcal / mol * Ang)
const double GMX_FRC_TO_AMBER = ANG_TO_NM * J_TO_CAL;
/// Convert Amber force units to Gromacs
const double AMBER_FRC_TO_GMX = NM_TO_ANG * CAL_TO_J;
/// Convert Gromacs velocity units (nm / ps) to Amber units (Ang / (1/20.455)ps).
const double GMX_VEL_TO_AMBER = NM_TO_ANG / AMBERTIME_TO_PS;
/// Convert Amber velocity units to Gromacs
const double AMBER_VEL_TO_GMX = ANG_TO_NM * AMBERTIME_TO_PS;
}
#endif
3 changes: 3 additions & 0 deletions src/Cpptraj.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,9 @@ std::string Cpptraj::Defines() {
#ifdef NO_XDRFILE
defined_str.append(" -DNO_XDRFILE");
#endif
#ifdef HAS_TNGFILE
defined_str.append(" -DHAS_TNGFILE");
#endif
#if defined(USE_SANDERLIB) && !defined(LIBCPPTRAJ)
defined_str.append(" -DUSE_SANDERLIB");
#endif
Expand Down
13 changes: 11 additions & 2 deletions src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ install: $(INSTALL_TARGETS)
install_cpptraj: cpptraj$(SFX)$(EXE)
mv cpptraj$(SFX)$(EXE) $(CPPTRAJBIN)

cpptraj$(SFX)$(EXE): $(OBJECTS) $(FFT_TARGET) $(READLINE_TARGET) $(CUDA_TARGET) $(XDRFILE_TARGET) $(ARPACK_TARGET)
cpptraj$(SFX)$(EXE): $(OBJECTS) $(FFT_TARGET) $(READLINE_TARGET) $(CUDA_TARGET) $(XDRFILE_TARGET) $(ARPACK_TARGET) $(TNGFILE_TARGET)
$(CXX) -o cpptraj$(SFX)$(EXE) $(OBJECTS) $(CUDA_TARGET) $(FFT_TARGET) $(READLINE_LIB) $(CPPTRAJ_LIB) $(LDFLAGS)

# libcpptraj ---------------------------
Expand All @@ -27,7 +27,7 @@ cpptraj$(SFX)$(EXE): $(OBJECTS) $(FFT_TARGET) $(READLINE_TARGET) $(CUDA_TARGET)

libcpptraj: $(LIBCPPTRAJ_TARGET)

$(CPPTRAJLIB)/libcpptraj$(SHARED_SUFFIX): $(LIBCPPTRAJ_OBJECTS) $(FFT_TARGET) $(CUDA_TARGET) $(XDRFILE_TARGET) $(ARPACK_TARGET)
$(CPPTRAJLIB)/libcpptraj$(SHARED_SUFFIX): $(LIBCPPTRAJ_OBJECTS) $(FFT_TARGET) $(CUDA_TARGET) $(XDRFILE_TARGET) $(ARPACK_TARGET) $(TNGFILE_TARGET)
$(CXX) -shared -o $(CPPTRAJLIB)/libcpptraj$(SHARED_SUFFIX) $(LIBCPPTRAJ_OBJECTS) $(FFT_TARGET) $(CUDA_TARGET) $(CPPTRAJ_LIB) $(LDFLAGS)

# Static libraries ---------------------
Expand Down Expand Up @@ -72,6 +72,9 @@ xdrfile/libxdrfile.a: ../external.config.h
arpack/libarpack.a: ../external.config.h
cd arpack && $(MAKE) install

tng/libtng_io.a: ../external.config.h
cd tng && $(MAKE) all

noreadline:
@echo ""
@echo "Skipping bundled READLINE build"
Expand All @@ -82,6 +85,11 @@ noxdrfile:
@echo "Skipping bundled XDRFILE build"
@echo ""

notngfile:
@echo ""
@echo "Skipping bundled TNG build"
@echo ""

noarpack:
@echo ""
@echo "Skipping bundled ARPACK build"
Expand All @@ -107,6 +115,7 @@ clean:
cd xdrfile && $(MAKE) clean
cd arpack && $(MAKE) clean
cd cuda_kernels && $(MAKE) clean
cd tng && $(MAKE) clean

uninstall:
$(DEL_FILE) $(CPPTRAJBIN)/cpptraj$(SFX)$(EXE)
Expand Down
Loading