diff --git a/doc/Makefile b/doc/Makefile index dfae774c61..3da7239c54 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -22,7 +22,7 @@ endif SOURCES=$(wildcard src/*.txt) OBJECTS=$(SOURCES:src/%.txt=$(RSTDIR)/%.rst) -.PHONY: help clean-all clean html pdf old venv +.PHONY: help clean-all clean epub html pdf old venv # ------------------------------------------ @@ -32,6 +32,7 @@ help: @echo " pdf create Manual.pdf and Developer.pdf in this dir" @echo " old create old-style HTML doc pages in old dir" @echo " fetch fetch HTML and PDF files from LAMMPS web site" + @echo " epub create ePUB format manual for e-book readers" @echo " clean remove all intermediate RST files" @echo " clean-all reset the entire build environment" @echo " txt2html build txt2html tool" @@ -63,6 +64,20 @@ html: $(OBJECTS) @rm -rf html/USER/*/*.[sg]* @echo "Build finished. The HTML pages are in doc/html." +epub: $(OBJECTS) + @mkdir -p epub + @rm -f LAMMPS.epub + @cp src/JPG/lammps-logo.png epub/ + @(\ + . $(VENV)/bin/activate ;\ + cp -r src/* $(RSTDIR)/ ;\ + sphinx-build -j 8 -b epub -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) epub ;\ + deactivate ;\ + ) + @mv epub/LAMMPS.epub . + @rm -rf epub + @echo "Build finished. The ePUB manual file is created." + pdf: utils/txt2html/txt2html.exe @(\ cd src; \ diff --git a/doc/README b/doc/README index ea0edc0356..6db4ba3ca7 100644 --- a/doc/README +++ b/doc/README @@ -1,13 +1,14 @@ LAMMPS Documentation Depending on how you obtained LAMMPS, this directory has 2 or 3 -sub-directories and optionally 2 PDF files: +sub-directories and optionally 2 PDF files and an ePUB file: src content files for LAMMPS documentation html HTML version of the LAMMPS manual (see html/Manual.html) tools tools and settings for building the documentation Manual.pdf large PDF version of entire manual Developer.pdf small PDF with info about how LAMMPS is structured +LAMMPS.epub Manual in ePUB format If you downloaded LAMMPS as a tarball from the web site, all these directories and files should be included. @@ -49,6 +50,7 @@ make pdf # generate 2 PDF files (Manual.pdf,Developer.pdf) make old # generate old-style HTML pages in old dir via txt2html make fetch # fetch HTML doc pages and 2 PDF files from web site # as a tarball and unpack into html dir and 2 PDFs +make epub # generate LAMMPS.epub in ePUB format using Sphinx make clean # remove intermediate RST files created by HTML build make clean-all # remove entire build folder and any cached data @@ -91,3 +93,23 @@ This will install virtualenv from the Python Package Index. ---------------- Installing prerequisites for PDF build + +[TBA] + +---------------- + +Installing prerequisites for epub build + +## ePUB + +Same as for HTML. This uses the same tools and configuration +files as the HTML tree. + +For converting the generated ePUB file to a mobi format file +(for e-book readers like Kindle, that cannot read ePUB), you +also need to have the 'ebook-convert' tool from the "calibre" +software installed. http://calibre-ebook.com/ +You first create the ePUB file with 'make epub' and then do: + +ebook-convert LAMMPS.epub LAMMPS.mobi + diff --git a/doc/src/JPG/lammps-logo.png b/doc/src/JPG/lammps-logo.png new file mode 100644 index 0000000000..ae5ba2d8ad Binary files /dev/null and b/doc/src/JPG/lammps-logo.png differ diff --git a/doc/utils/sphinx-config/conf.py b/doc/utils/sphinx-config/conf.py index d892178346..2b4950519a 100644 --- a/doc/utils/sphinx-config/conf.py +++ b/doc/utils/sphinx-config/conf.py @@ -276,4 +276,27 @@ texinfo_documents = [ # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False +# -- Options for ePUB output ---------------------------------------------- + +epub_title = 'LAMMPS Documentation - ' + get_lammps_version() + +epub_cover = ('lammps-logo.png', '') + +epub_description = """ +This is the Manual for the LAMMPS software package. + +LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel +Simulator and is a classical molecular dynamics simulation code +designed to run efficiently on parallel computers. It was developed +at Sandia National Laboratories, a US Department of Energy facility, +with funding from the DOE. It is an open-source code, distributed +freely under the terms of the GNU Public License (GPL). + +The primary author of the code is Steve Plimpton, who can be emailed +at sjplimp@sandia.gov. The LAMMPS WWW Site at lammps.sandia.gov has +more information about the code and its uses. +""" + +epub_author = 'The LAMMPS Developers' + diff --git a/src/MOLECULE/bond_table.cpp b/src/MOLECULE/bond_table.cpp index 3a9f7cc4d0..858bc83a36 100644 --- a/src/MOLECULE/bond_table.cpp +++ b/src/MOLECULE/bond_table.cpp @@ -585,17 +585,26 @@ double BondTable::splint(double *xa, double *ya, double *y2a, int n, double x) /* ---------------------------------------------------------------------- calculate potential u and force f at distance x - insure x is between bond min/max + insure x is between bond min/max, exit with error if not ------------------------------------------------------------------------- */ void BondTable::uf_lookup(int type, double x, double &u, double &f) { int itable; double fraction,a,b; + char estr[128]; Table *tb = &tables[tabindex[type]]; - x = MAX(x,tb->lo); - x = MIN(x,tb->hi); + if (x < tb->lo) { + sprintf(estr,"Bond length < table inner cutoff: " + "type %d length %g",type,x); + error->one(FLERR,estr); + } + if (x > tb->hi) { + sprintf(estr,"Bond length > table outer cutoff: " + "type %d length %g",type,x); + error->one(FLERR,estr); + } if (tabstyle == LINEAR) { itable = static_cast ((x - tb->lo) * tb->invdelta); diff --git a/src/create_box.cpp b/src/create_box.cpp index c7fd98b2b2..3a13109981 100644 --- a/src/create_box.cpp +++ b/src/create_box.cpp @@ -159,6 +159,7 @@ void CreateBox::command(int narg, char **arg) } else if (strcmp(arg[iarg],"extra/special/per/atom") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal create_box command"); force->special_extra = force->inumeric(FLERR,arg[iarg+1]); + atom->maxspecial += force->special_extra; iarg += 2; } else error->all(FLERR,"Illegal create_box command"); } diff --git a/src/molecule.cpp b/src/molecule.cpp index 5e9aa292d0..0febb784c8 100644 --- a/src/molecule.cpp +++ b/src/molecule.cpp @@ -595,6 +595,10 @@ void Molecule::read(int flag) // set maxspecial on first pass, so allocate() has a size if (bondflag && specialflag == 0) { + if (domain->box_exist == 0) + error->all(FLERR,"Cannot auto-generate special bonds before " + "simulation box is defined"); + maxspecial = atom->maxspecial; if (flag) { special_generate();